Skip to content

SLAB support for KASAN

Alexander Potapenko linux-mm lkml 9 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v8 Latest7 patches 4 repliesIn review
  2. v77 patches 8 repliesSuperseded
  3. v67 patches 0 repliesSuperseded
Earlier versions · 6
VersionPostedPatchesRepliesStatus
v57 patches10 repliesSuperseded
v4 posting 2/20 of 7 patches3 repliesSuperseded
v4 posting 1/27 patches21 repliesSuperseded
v37 patches1 replySuperseded
v27 patches2 repliesSuperseded
v18 patches31 repliesSuperseded

Patches in v8 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/7kasan: Modify kmalloc_large_oob_right(), add kmalloc_pagealloc_oob_right()lib/test_kasan.c+27 -10 replies
2/7mm, kasan: SLAB supportDocumentation/kasan.txt include/linux/kasan.h include/linux/slab.h +9 more+266 -220 replies
3/7mm, kasan: Added GFP flags to KASAN APIinclude/linux/kasan.h include/linux/slab.h mm/kasan/kasan.c +5 more+48 -420 replies
4/7arch, ftrace: For KASAN put hard/soft IRQ entries into separate sectionsarch/arm/include/asm/exception.h arch/arm/kernel/vmlinux.lds.S arch/arm64/include/asm/exception.h +20 more+51 -150 replies
5/7mm, kasan: Stackdepot implementation. Enable stackdepot for SLABarch/x86/kernel/Makefile include/linux/stackdepot.h lib/Kconfig +6 more+385 -120 replies
6/7kasan: Test fix: Warn if the UAF could not be detected in kmalloc_uaf2lib/test_kasan.c+2 -00 replies
7/7mm: kasan: Initial memory quarantine implementationinclude/linux/kasan.h lib/test_kasan.c mm/kasan/Makefile +10 more+438 -294 replies

Reviews trailers per patch

2 of 7 patches have a Reviewed-by or Acked-by.

PatchSteven RostedtAndrey Ryabinin
1/7
2/7
3/7
4/7A-b
5/7
6/7A-b
7/7

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v8 thread

Cover letter [PATCH v8 0/7] SLAB support for KASAN

This patch set implements SLAB support for KASAN

Unlike SLUB, SLAB doesn't store allocation/deallocation stacks for heap objects, therefore we reimplement this feature in mm/kasan/stackdepot.c. The intention is to ultimately switch SLUB to use this implementation as well, which will save a lot of memory (right now SLUB bloats each object by 256 bytes to store the allocation/deallocation stacks).

Also neither SLUB nor SLAB delay the reuse of freed memory chunks, which is necessary for better detection of use-after-free errors. We introduce memory quarantine (mm/kasan/quarantine.c), which allows delayed reuse of deallocated memory.

Alexander Potapenko (7):
kasan: Modify kmalloc_large_oob_right(), add
kmalloc_pagealloc_oob_right()
mm, kasan: SLAB support
mm, kasan: Added GFP flags to KASAN API
arch, ftrace: For KASAN put hard/soft IRQ entries into separate
sections
mm, kasan: Stackdepot implementation. Enable stackdepot for SLAB
kasan: Test fix: Warn if the UAF could not be detected in kmalloc_uaf2
mm: kasan: Initial memory quarantine implementation
---
v2: - merged two patches that touched kmalloc_large_oob_right
- moved stackdepot implementation to lib/
- moved IRQ definitions to include/linux/interrupt.h

v3: - minor description changes
- store deallocation info in the "mm, kasan: SLAB support" patch

v4: - fix kbuild error reports

v5: - SLAB allocator, stackdepot: adopted suggestions by Andrey Ryabinin
- IRQ: fixed kbuild warnings

v6: - stackdepot: fixed kbuild warnings, simplified kasan_track, use vmalloc() for depot when possible
- quarantine: improved patch description, removed dead code

v7: - fix kbuild error reports

v8: - removed vmalloc() and recursion flags from stackdepot
---

 Documentation/kasan.txt              |   5 +-
 arch/arm/include/asm/exception.h     |   2 +-
 arch/arm/kernel/vmlinux.lds.S        |   1 +
 arch/arm64/include/asm/exception.h   |   2 +-
 arch/arm64/kernel/vmlinux.lds.S      |   1 +
 arch/blackfin/kernel/vmlinux.lds.S   |   1 +
 arch/c6x/kernel/vmlinux.lds.S        |   1 +
 arch/metag/kernel/vmlinux.lds.S      |   1 +
 arch/microblaze/kernel/vmlinux.lds.S |   1 +
 arch/mips/kernel/vmlinux.lds.S       |   1 +
 arch/nios2/kernel/vmlinux.lds.S      |   1 +
 arch/openrisc/kernel/vmlinux.lds.S   |   1 +
 arch/parisc/kernel/vmlinux.lds.S     |   1 +
 arch/powerpc/kernel/vmlinux.lds.S    |   1 +
 arch/s390/kernel/vmlinux.lds.S       |   1 +
 arch/sh/kernel/vmlinux.lds.S         |   1 +
 arch/sparc/kernel/vmlinux.lds.S      |   1 +
 arch/tile/kernel/vmlinux.lds.S       |   1 +
 arch/x86/kernel/Makefile             |   1 +
 arch/x86/kernel/vmlinux.lds.S        |   1 +
 include/asm-generic/vmlinux.lds.h    |  12 +-
 include/linux/ftrace.h               |  11 --
 include/linux/interrupt.h            |  20 +++
 include/linux/kasan.h                |  63 +++++---
 include/linux/slab.h                 |  10 +-
 include/linux/slab_def.h             |  14 ++
 include/linux/slub_def.h             |  11 ++
 include/linux/stackdepot.h           |  32 ++++
 kernel/softirq.c                     |   2 +-
 kernel/trace/trace_functions_graph.c |   1 +
 lib/Kconfig                          |   4 +
 lib/Kconfig.kasan                    |   5 +-
 lib/Makefile                         |   3 +
 lib/stackdepot.c                     | 278 +++++++++++++++++++++++++++++++++
 lib/test_kasan.c                     |  59 ++++++-
 mm/Makefile                          |   1 +
 mm/kasan/Makefile                    |   4 +
 mm/kasan/kasan.c                     | 219 ++++++++++++++++++++++++--
 mm/kasan/kasan.h                     |  44 ++++++
 mm/kasan/quarantine.c                | 289 +++++++++++++++++++++++++++++++++++
 mm/kasan/report.c                    |  63 ++++++--
 mm/mempool.c                         |  23 +--
 mm/page_alloc.c                      |   2 +-
 mm/slab.c                            |  53 ++++++-
 mm/slab.h                            |   4 +-
 mm/slab_common.c                     |   8 +-
 mm/slub.c                            |  19 +--
 47 files changed, 1188 insertions(+), 92 deletions(-)
 create mode 100644 include/linux/stackdepot.h
 create mode 100644 lib/stackdepot.c
 create mode 100644 mm/kasan/quarantine.c
Signature · 7 lines
2.7.0.rc3.207.g0ac5344

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>