On big-endian systems the 32-bit low and high halves need to be swapped, for the underlying assembly implemenation to work correctly.
Fixes: fd1d362600e2 ("ARM: implement memset32 & memset64") Cc: stable@vger.kernel.org Signed-off-by: Thomas Weißschuh thomas.weissschuh@linutronix.de --- Found by the string_test_memset64 KUnit test. --- arch/arm/include/asm/string.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/arch/arm/include/asm/string.h b/arch/arm/include/asm/string.h index 6c607c68f3ad..c35250c4991b 100644 --- a/arch/arm/include/asm/string.h +++ b/arch/arm/include/asm/string.h @@ -42,7 +42,10 @@ static inline void *memset32(uint32_t *p, uint32_t v, __kernel_size_t n) extern void *__memset64(uint64_t *, uint32_t low, __kernel_size_t, uint32_t hi); static inline void *memset64(uint64_t *p, uint64_t v, __kernel_size_t n) { - return __memset64(p, v, n * 8, v >> 32); + if (IS_ENABLED(CONFIG_CPU_LITTLE_ENDIAN)) + return __memset64(p, v, n * 8, v >> 32); + else + return __memset64(p, v >> 32, n * 8, v); }
/*
--- base-commit: 8f0b4cce4481fb22653697cced8d0d04027cb1e8 change-id: 20251230-armeb-memset64-01f2ae83f9ef
Best regards,
On Fri, Jan 2, 2026, at 08:15, Thomas Weißschuh wrote:
On big-endian systems the 32-bit low and high halves need to be swapped, for the underlying assembly implemenation to work correctly.
Fixes: fd1d362600e2 ("ARM: implement memset32 & memset64") Cc: stable@vger.kernel.org Signed-off-by: Thomas Weißschuh thomas.weissschuh@linutronix.de
Found by the string_test_memset64 KUnit test.
Good catch! I guess that likely means you are the first one to run kunit test on armbe since the tests got added. Did you find any other differences between BE and LE kernels running kunit?
Reviewed-by: Arnd Bergmann arnd@arndb.de
On Fri, Jan 02, 2026 at 10:24:33AM +0100, Arnd Bergmann wrote:
On Fri, Jan 2, 2026, at 08:15, Thomas Weißschuh wrote:
On big-endian systems the 32-bit low and high halves need to be swapped, for the underlying assembly implemenation to work correctly.
Fixes: fd1d362600e2 ("ARM: implement memset32 & memset64") Cc: stable@vger.kernel.org Signed-off-by: Thomas Weißschuh thomas.weissschuh@linutronix.de
Found by the string_test_memset64 KUnit test.
Good catch! I guess that likely means you are the first one to run kunit test on armbe since the tests got added. Did you find any other differences between BE and LE kernels running kunit?
No other differences with the default set of tests. There was a failure for both in test_polyval_preparekey_in_irqs, see [0]. To get some more exposure I propose a new kunit QEMU configuration in [1].
Reviewed-by: Arnd Bergmann arnd@arndb.de
Thanks!
[0] https://lore.kernel.org/lkml/20260102-kunit-polyval-fix-v1-1-5313b5a65f35@li... [1] https://lore.kernel.org/lkml/20260102-kunit-armeb-v1-1-e8e5475d735c@linutron...
linux-stable-mirror@lists.linaro.org