Skip to content

Commit 7581495

Browse files
mpeakpm00
authored andcommitted
mm: kfence: fix false positives on big endian
Since commit 1ba3cbf ("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/[email protected] Fixes: 1ba3cbf ("mm: kfence: improve the performance of __kfence_alloc() and __kfence_free()") Signed-off-by: Michael Ellerman <[email protected]> Reviewed-by: Alexander Potapenko <[email protected]> Reviewed-by: Marco Elver <[email protected]> Cc: Peng Zhang <[email protected]> Cc: David Laight <[email protected]> Signed-off-by: Andrew Morton <[email protected]>
1 parent d461aac commit 7581495

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

mm/kfence/kfence.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
* canary of every 8 bytes is the same. 64-bit memory can be filled and checked
3030
* at a time instead of byte by byte to improve performance.
3131
*/
32-
#define KFENCE_CANARY_PATTERN_U64 ((u64)0xaaaaaaaaaaaaaaaa ^ (u64)(0x0706050403020100))
32+
#define KFENCE_CANARY_PATTERN_U64 ((u64)0xaaaaaaaaaaaaaaaa ^ (u64)(le64_to_cpu(0x0706050403020100)))
3333

3434
/* Maximum stack depth for reports. */
3535
#define KFENCE_STACK_DEPTH 64

0 commit comments

Comments
 (0)