OSDN Git Service

kasan, page_alloc: simplify kasan_poison_pages call site
authorAndrey Konovalov <andreyknvl@google.com>
Fri, 25 Mar 2022 01:10:13 +0000 (18:10 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 25 Mar 2022 02:06:46 +0000 (19:06 -0700)
Simplify the code around calling kasan_poison_pages() in
free_pages_prepare().

This patch does no functional changes.

Link: https://lkml.kernel.org/r/ae4f9bcf071577258e786bcec4798c145d718c46.1643047180.git.andreyknvl@google.com
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
Reviewed-by: Alexander Potapenko <glider@google.com>
Acked-by: Marco Elver <elver@google.com>
Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Evgenii Stepanov <eugenis@google.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Peter Collingbourne <pcc@google.com>
Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
Cc: Will Deacon <will@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/page_alloc.c

index d16df44..4f1257e 100644 (file)
@@ -1298,6 +1298,7 @@ static __always_inline bool free_pages_prepare(struct page *page,
 {
        int bad = 0;
        bool skip_kasan_poison = should_skip_kasan_poison(page, fpi_flags);
+       bool init = want_init_on_free();
 
        VM_BUG_ON_PAGE(PageTail(page), page);
 
@@ -1370,19 +1371,10 @@ static __always_inline bool free_pages_prepare(struct page *page,
         * With hardware tag-based KASAN, memory tags must be set before the
         * page becomes unavailable via debug_pagealloc or arch_free_page.
         */
-       if (kasan_has_integrated_init()) {
-               bool init = want_init_on_free();
-
-               if (!skip_kasan_poison)
-                       kasan_poison_pages(page, order, init);
-       } else {
-               bool init = want_init_on_free();
-
-               if (init)
-                       kernel_init_free_pages(page, 1 << order);
-               if (!skip_kasan_poison)
-                       kasan_poison_pages(page, order, init);
-       }
+       if (init && !kasan_has_integrated_init())
+               kernel_init_free_pages(page, 1 << order);
+       if (!skip_kasan_poison)
+               kasan_poison_pages(page, order, init);
 
        /*
         * arch_free_page() can make the page's contents inaccessible.  s390