Thread (4 messages) 4 messages, 3 authors, 2021-06-28

Re: [PATCH v2 1/1] kasan: Add memzero init for unaligned size under SLUB debug

From: Marco Elver <elver@google.com>
Date: 2021-06-28 18:42:12
Also in: linux-arm-kernel, linux-mediatek, lkml

Possibly related (same subject, not in this thread)

On Thu, 24 Jun 2021 at 13:27, [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: Yee Lee <redacted>

Issue: when SLUB debug is on, hwtag kasan_unpoison() would overwrite
the redzone of object with unaligned size.

An additional memzero_explicit() path is added to replacing init by
hwtag instruction for those unaligned size at SLUB debug mode.

Signed-off-by: Yee Lee <redacted>
---
 mm/kasan/kasan.h | 6 ++++++
 1 file changed, 6 insertions(+)
diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h
index 8f450bc28045..d1054f35838f 100644
--- a/mm/kasan/kasan.h
+++ b/mm/kasan/kasan.h
@@ -387,6 +387,12 @@ static inline void kasan_unpoison(const void *addr, size_t size, bool init)

        if (WARN_ON((unsigned long)addr & KASAN_GRANULE_MASK))
                return;
+#if IS_ENABLED(CONFIG_SLUB_DEBUG)
Avoid the #if. I think none of the stuff referenced here is only
available if CONFIG_SLUB_DEBUG. In that case, please just write:

if (IS_ENABLED(CONFIG_SLUB_DEBUG) && init && .........) {

The compiler will correctly optimize out the branch if the config
option is not enabled. But the benefit is we compile-test this code
with all configs.
+       if (init && ((unsigned long)size & KASAN_GRANULE_MASK)) {
+               init = false;
+               memzero_explicit((void *)addr, size);
+       }
+#endif
Thanks,
-- Marco
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help