Thread (47 messages) 47 messages, 4 authors, 2021-12-13

Re: [PATCH v2 08/34] kasan: only apply __GFP_ZEROTAGS when memory is zeroed

From: Andrey Konovalov <andreyknvl@gmail.com>
Date: 2021-12-13 21:57:19
Also in: linux-arm-kernel, lkml

On Fri, Dec 10, 2021 at 6:48 PM Catalin Marinas [off-list ref] wrote:
On Mon, Dec 06, 2021 at 10:43:45PM +0100, andrey.konovalov@linux.dev wrote:
quoted
From: Andrey Konovalov <redacted>

__GFP_ZEROTAGS should only be effective if memory is being zeroed.
Currently, hardware tag-based KASAN violates this requirement.

Fix by including an initialization check along with checking for
__GFP_ZEROTAGS.

Signed-off-by: Andrey Konovalov <redacted>
Reviewed-by: Alexander Potapenko <glider@google.com>
---
 mm/kasan/hw_tags.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/mm/kasan/hw_tags.c b/mm/kasan/hw_tags.c
index 0b8225add2e4..c643740b8599 100644
--- a/mm/kasan/hw_tags.c
+++ b/mm/kasan/hw_tags.c
@@ -199,11 +199,12 @@ void kasan_alloc_pages(struct page *page, unsigned int order, gfp_t flags)
       * page_alloc.c.
       */
      bool init = !want_init_on_free() && want_init_on_alloc(flags);
+     bool init_tags = init && (flags & __GFP_ZEROTAGS);

      if (flags & __GFP_SKIP_KASAN_POISON)
              SetPageSkipKASanPoison(page);

-     if (flags & __GFP_ZEROTAGS) {
+     if (init_tags) {
You can probably leave this unchanged but add a WARN_ON_ONCE() if !init.
AFAICT there's only a single place where __GFP_ZEROTAGS is passed.
Yes, there's only one such place.

In a later patch, I implement handling __GFP_ZEROTAGS in regardless of
having __GFP_ZERO present or not, so adding WARN_ON() here and then
removing it probably doesn't make much sense.

As per what you said in the other message, I've left this unchanged.

Thanks!
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help