Andrey Konovalov 02b8b1b5a9 kasan: fix zeroing vmalloc memory with HW_TAGS
[ Upstream commit 6c2f761dad7851d8088b91063ccaea3c970efe78 ]

HW_TAGS KASAN skips zeroing page_alloc allocations backing vmalloc
mappings via __GFP_SKIP_ZERO.  Instead, these pages are zeroed via
kasan_unpoison_vmalloc() by passing the KASAN_VMALLOC_INIT flag.

The problem is that __kasan_unpoison_vmalloc() does not zero pages when
either kasan_vmalloc_enabled() or is_vmalloc_or_module_addr() fail.

Thus:

1. Change __vmalloc_node_range() to only set KASAN_VMALLOC_INIT when
   __GFP_SKIP_ZERO is set.

2. Change __kasan_unpoison_vmalloc() to always zero pages when the
   KASAN_VMALLOC_INIT flag is set.

3. Add WARN_ON() asserts to check that KASAN_VMALLOC_INIT cannot be set
   in other early return paths of __kasan_unpoison_vmalloc().

Also clean up the comment in __kasan_unpoison_vmalloc.

Link: https://lkml.kernel.org/r/4bc503537efdc539ffc3f461c1b70162eea31cf6.1654798516.git.andreyknvl@google.com
Fixes: 23689e91fb22 ("kasan, vmalloc: add vmalloc tagging for HW_TAGS")
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
Cc: Marco Elver <elver@google.com>
Cc: Alexander Potapenko <glider@google.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-08-17 15:15:26 +02:00
..
2022-03-24 19:06:45 -07:00
2022-02-14 19:51:47 +01:00
2022-05-25 10:47:48 -07:00
2022-03-23 18:03:08 -07:00
2022-05-13 07:20:09 -07:00
2022-05-28 11:27:17 -07:00
2022-03-22 17:03:12 -07:00
2022-05-26 16:57:20 -07:00
2022-05-25 10:24:04 -07:00
2022-03-22 18:26:56 -07:00
2022-05-28 11:27:17 -07:00
2022-06-04 14:04:27 -07:00
2022-01-15 16:30:31 +02:00
2022-05-19 14:08:53 -07:00