提交 7581495a 编写于 作者: M Michael Ellerman 提交者: Andrew Morton

mm: kfence: fix false positives on big endian

Since commit 1ba3cbf3 ("mm: kfence: improve the performance of
__kfence_alloc() and __kfence_free()"), kfence reports failures in random
places at boot on big endian machines.

The problem is that the new KFENCE_CANARY_PATTERN_U64 encodes the address
of each byte in its value, so it needs to be byte swapped on big endian
machines.

The compiler is smart enough to do the le64_to_cpu() at compile time, so
there is no runtime overhead.

Link: https://lkml.kernel.org/r/20230505035127.195387-1-mpe@ellerman.id.au
Fixes: 1ba3cbf3 ("mm: kfence: improve the performance of __kfence_alloc() and __kfence_free()")
Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
Reviewed-by: NAlexander Potapenko <glider@google.com>
Reviewed-by: NMarco Elver <elver@google.com>
Cc: Peng Zhang <zhangpeng.00@bytedance.com>
Cc: David Laight <David.Laight@ACULAB.COM>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
上级 d461aac9
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
* canary of every 8 bytes is the same. 64-bit memory can be filled and checked * canary of every 8 bytes is the same. 64-bit memory can be filled and checked
* at a time instead of byte by byte to improve performance. * at a time instead of byte by byte to improve performance.
*/ */
#define KFENCE_CANARY_PATTERN_U64 ((u64)0xaaaaaaaaaaaaaaaa ^ (u64)(0x0706050403020100)) #define KFENCE_CANARY_PATTERN_U64 ((u64)0xaaaaaaaaaaaaaaaa ^ (u64)(le64_to_cpu(0x0706050403020100)))
/* Maximum stack depth for reports. */ /* Maximum stack depth for reports. */
#define KFENCE_STACK_DEPTH 64 #define KFENCE_STACK_DEPTH 64
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册