All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/34] kasan, vmalloc, arm64: add vmalloc tagging support for SW/HW_TAGS
@ 2021-12-06 21:22 ` andrey.konovalov
  0 siblings, 0 replies; 94+ messages in thread
From: andrey.konovalov @ 2021-12-06 21:22 UTC (permalink / raw)
  To: Marco Elver, Alexander Potapenko, Vincenzo Frascino,
	Catalin Marinas, Peter Collingbourne
  Cc: Andrey Konovalov, Dmitry Vyukov, Andrey Ryabinin, kasan-dev,
	Andrew Morton, linux-mm, Will Deacon, Mark Rutland,
	linux-arm-kernel, Evgenii Stepanov, linux-kernel,
	Andrey Konovalov

From: Andrey Konovalov <andreyknvl@google.com>

Hi,

This patchset adds vmalloc tagging support for SW_TAGS and HW_TAGS
KASAN modes.

The tree with patches is available here:

https://github.com/xairy/linux/tree/up-kasan-vmalloc-tags-v2

About half of patches are cleanups I went for along the way. None of
them seem to be important enough to go through stable, so I decided
not to split them out into separate patches/series.

I'll keep the patchset based on the mainline for now. Once the
high-level issues are resolved, I'll rebase onto mm - there might be
a few conflicts right now.

The patchset is partially based on an early version of the HW_TAGS
patchset by Vincenzo that had vmalloc support. Thus, I added a
Co-developed-by tag into a few patches.

SW_TAGS vmalloc tagging support is straightforward. It reuses all of
the generic KASAN machinery, but uses shadow memory to store tags
instead of magic values. Naturally, vmalloc tagging requires adding
a few kasan_reset_tag() annotations to the vmalloc code.

HW_TAGS vmalloc tagging support stands out. HW_TAGS KASAN is based on
Arm MTE, which can only assigns tags to physical memory. As a result,
HW_TAGS KASAN only tags vmalloc() allocations, which are backed by
page_alloc memory. It ignores vmap() and others.

Changes in v1->v2:
- Move memory init for vmalloc() into vmalloc code for HW_TAGS KASAN.
- Minor fixes and code reshuffling, see patches for lists of changes.

Thanks!

Andrey Konovalov (34):
  kasan, page_alloc: deduplicate should_skip_kasan_poison
  kasan, page_alloc: move tag_clear_highpage out of
    kernel_init_free_pages
  kasan, page_alloc: merge kasan_free_pages into free_pages_prepare
  kasan, page_alloc: simplify kasan_poison_pages call site
  kasan, page_alloc: init memory of skipped pages on free
  kasan: drop skip_kasan_poison variable in free_pages_prepare
  mm: clarify __GFP_ZEROTAGS comment
  kasan: only apply __GFP_ZEROTAGS when memory is zeroed
  kasan, page_alloc: refactor init checks in post_alloc_hook
  kasan, page_alloc: merge kasan_alloc_pages into post_alloc_hook
  kasan, page_alloc: combine tag_clear_highpage calls in post_alloc_hook
  kasan, page_alloc: move SetPageSkipKASanPoison in post_alloc_hook
  kasan, page_alloc: move kernel_init_free_pages in post_alloc_hook
  kasan, page_alloc: simplify kasan_unpoison_pages call site
  kasan: clean up metadata byte definitions
  kasan: define KASAN_VMALLOC_INVALID for SW_TAGS
  kasan, x86, arm64, s390: rename functions for modules shadow
  kasan, vmalloc: drop outdated VM_KASAN comment
  kasan: reorder vmalloc hooks
  kasan: add wrappers for vmalloc hooks
  kasan, vmalloc: reset tags in vmalloc functions
  kasan, fork: don't tag stacks allocated with vmalloc
  kasan, vmalloc: add vmalloc support to SW_TAGS
  kasan, vmalloc, arm64: mark vmalloc mappings as pgprot_tagged
  kasan, vmalloc: don't unpoison VM_ALLOC pages before mapping
  kasan, page_alloc: allow skipping unpoisoning for HW_TAGS
  kasan, page_alloc: allow skipping memory init for HW_TAGS
  kasan, vmalloc: add vmalloc support to HW_TAGS
  kasan: mark kasan_arg_stacktrace as __initdata
  kasan: simplify kasan_init_hw_tags
  kasan: add kasan.vmalloc command line flag
  arm64: select KASAN_VMALLOC for SW/HW_TAGS modes
  kasan: documentation updates
  kasan: improve vmalloc tests

 Documentation/dev-tools/kasan.rst |  17 ++-
 arch/arm64/Kconfig                |   2 +-
 arch/arm64/include/asm/vmalloc.h  |  10 ++
 arch/arm64/kernel/module.c        |   2 +-
 arch/s390/kernel/module.c         |   2 +-
 arch/x86/kernel/module.c          |   2 +-
 include/linux/gfp.h               |  28 +++--
 include/linux/kasan.h             |  91 +++++++++------
 include/linux/vmalloc.h           |  18 ++-
 kernel/fork.c                     |   1 +
 lib/Kconfig.kasan                 |  20 ++--
 lib/test_kasan.c                  | 181 +++++++++++++++++++++++++++++-
 mm/kasan/common.c                 |   4 +-
 mm/kasan/hw_tags.c                | 157 +++++++++++++++++++++-----
 mm/kasan/kasan.h                  |  16 ++-
 mm/kasan/shadow.c                 |  57 ++++++----
 mm/page_alloc.c                   | 150 +++++++++++++++++--------
 mm/vmalloc.c                      |  72 ++++++++++--
 18 files changed, 631 insertions(+), 199 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 94+ messages in thread

end of thread, other threads:[~2021-12-13 22:31 UTC | newest]

Thread overview: 94+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-06 21:22 [PATCH v2 00/34] kasan, vmalloc, arm64: add vmalloc tagging support for SW/HW_TAGS andrey.konovalov
2021-12-06 21:22 ` andrey.konovalov
2021-12-06 21:22 ` [PATCH v2 01/34] kasan, page_alloc: deduplicate should_skip_kasan_poison andrey.konovalov
2021-12-06 21:22   ` andrey.konovalov
2021-12-06 21:31 ` [PATCH v2 02/34] kasan, page_alloc: move tag_clear_highpage out of kernel_init_free_pages andrey.konovalov
2021-12-06 21:31   ` andrey.konovalov
2021-12-06 21:31 ` [PATCH v2 03/34] kasan, page_alloc: merge kasan_free_pages into free_pages_prepare andrey.konovalov
2021-12-06 21:31   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 04/34] kasan, page_alloc: simplify kasan_poison_pages call site andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 05/34] kasan, page_alloc: init memory of skipped pages on free andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 06/34] kasan: drop skip_kasan_poison variable in free_pages_prepare andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 07/34] mm: clarify __GFP_ZEROTAGS comment andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-07 17:33   ` Andrey Konovalov
2021-12-07 17:33     ` Andrey Konovalov
2021-12-06 21:43 ` [PATCH v2 08/34] kasan: only apply __GFP_ZEROTAGS when memory is zeroed andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-10 17:48   ` Catalin Marinas
2021-12-10 17:48     ` Catalin Marinas
2021-12-13 21:57     ` Andrey Konovalov
2021-12-13 21:57       ` Andrey Konovalov
2021-12-06 21:43 ` [PATCH v2 09/34] kasan, page_alloc: refactor init checks in post_alloc_hook andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 10/34] kasan, page_alloc: merge kasan_alloc_pages into post_alloc_hook andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 11/34] kasan, page_alloc: combine tag_clear_highpage calls in post_alloc_hook andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 12/34] kasan, page_alloc: move SetPageSkipKASanPoison " andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 13/34] kasan, page_alloc: move kernel_init_free_pages " andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 14/34] kasan, page_alloc: simplify kasan_unpoison_pages call site andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 15/34] kasan: clean up metadata byte definitions andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 16/34] kasan: define KASAN_VMALLOC_INVALID for SW_TAGS andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 17/34] kasan, x86, arm64, s390: rename functions for modules shadow andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-10 17:55   ` Catalin Marinas
2021-12-10 17:55     ` Catalin Marinas
2021-12-06 21:43 ` [PATCH v2 18/34] kasan, vmalloc: drop outdated VM_KASAN comment andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 19/34] kasan: reorder vmalloc hooks andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 20/34] kasan: add wrappers for " andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 21/34] kasan, vmalloc: reset tags in vmalloc functions andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:43 ` [PATCH v2 22/34] kasan, fork: don't tag stacks allocated with vmalloc andrey.konovalov
2021-12-06 21:43   ` andrey.konovalov
2021-12-06 21:44 ` [PATCH v2 23/34] kasan, vmalloc: add vmalloc support to SW_TAGS andrey.konovalov
2021-12-06 21:44   ` andrey.konovalov
2021-12-06 21:44 ` [PATCH v2 24/34] kasan, vmalloc, arm64: mark vmalloc mappings as pgprot_tagged andrey.konovalov
2021-12-06 21:44   ` andrey.konovalov
2021-12-06 21:48   ` Andrey Konovalov
2021-12-06 21:48     ` Andrey Konovalov
2021-12-13 15:17   ` Vincenzo Frascino
2021-12-13 15:17     ` Vincenzo Frascino
2021-12-13 21:57     ` Andrey Konovalov
2021-12-13 21:57       ` Andrey Konovalov
2021-12-06 21:44 ` [PATCH v2 25/34] kasan, vmalloc: don't unpoison VM_ALLOC pages before mapping andrey.konovalov
2021-12-06 21:44   ` andrey.konovalov
2021-12-06 21:44 ` [PATCH v2 26/34] kasan, page_alloc: allow skipping unpoisoning for HW_TAGS andrey.konovalov
2021-12-06 21:44   ` andrey.konovalov
2021-12-06 21:44 ` [PATCH v2 27/34] kasan, page_alloc: allow skipping memory init " andrey.konovalov
2021-12-06 21:44   ` andrey.konovalov
2021-12-06 21:44 ` [PATCH v2 28/34] kasan, vmalloc: add vmalloc support to HW_TAGS andrey.konovalov
2021-12-06 21:44   ` andrey.konovalov
2021-12-06 21:49   ` Andrey Konovalov
2021-12-06 21:49     ` Andrey Konovalov
2021-12-13 15:34   ` Vincenzo Frascino
2021-12-13 15:34     ` Vincenzo Frascino
2021-12-13 21:57     ` Andrey Konovalov
2021-12-13 21:57       ` Andrey Konovalov
2021-12-06 21:44 ` [PATCH v2 29/34] kasan: mark kasan_arg_stacktrace as __initdata andrey.konovalov
2021-12-06 21:44   ` andrey.konovalov
2021-12-06 21:44 ` [PATCH v2 30/34] kasan: simplify kasan_init_hw_tags andrey.konovalov
2021-12-06 21:44   ` andrey.konovalov
2021-12-06 21:44 ` [PATCH v2 31/34] kasan: add kasan.vmalloc command line flag andrey.konovalov
2021-12-06 21:44   ` andrey.konovalov
2021-12-06 21:44 ` [PATCH v2 32/34] arm64: select KASAN_VMALLOC for SW/HW_TAGS modes andrey.konovalov
2021-12-06 21:44   ` andrey.konovalov
2021-12-10 18:04   ` Catalin Marinas
2021-12-10 18:04     ` Catalin Marinas
2021-12-06 21:44 ` [PATCH v2 33/34] kasan: documentation updates andrey.konovalov
2021-12-06 21:44   ` andrey.konovalov
2021-12-06 21:44 ` [PATCH v2 34/34] kasan: improve vmalloc tests andrey.konovalov
2021-12-06 21:44   ` andrey.konovalov
2021-12-07 19:46 ` [PATCH v2 00/34] kasan, vmalloc, arm64: add vmalloc tagging support for SW/HW_TAGS Andrey Konovalov
2021-12-07 19:46   ` Andrey Konovalov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.