| From: Alexander Potapenko <glider@google.com> |
| Subject: x86: kmsan: use C versions of memset16/memset32/memset64 |
| Date: Fri, 3 Mar 2023 15:14:32 +0100 |
| |
| KMSAN must see as many memory accesses as possible to prevent false |
| positive reports. Fall back to versions of |
| memset16()/memset32()/memset64() implemented in lib/string.c instead of |
| those written in assembly. |
| |
| Link: https://lkml.kernel.org/r/20230303141433.3422671-3-glider@google.com |
| Signed-off-by: Alexander Potapenko <glider@google.com> |
| Suggested-by: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp> |
| Reviewed-by: Marco Elver <elver@google.com> |
| Cc: Geert Uytterhoeven <geert@linux-m68k.org> |
| Cc: Daniel Vetter <daniel@ffwll.ch> |
| Cc: Helge Deller <deller@gmx.de> |
| Cc: Kees Cook <keescook@chromium.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| arch/x86/include/asm/string_64.h | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| --- a/arch/x86/include/asm/string_64.h~x86-kmsan-use-c-versions-of-memset16-memset32-memset64 |
| +++ a/arch/x86/include/asm/string_64.h |
| @@ -22,6 +22,11 @@ extern void *__memcpy(void *to, const vo |
| void *memset(void *s, int c, size_t n); |
| void *__memset(void *s, int c, size_t n); |
| |
| +/* |
| + * KMSAN needs to instrument as much code as possible. Use C versions of |
| + * memsetXX() from lib/string.c under KMSAN. |
| + */ |
| +#if !defined(CONFIG_KMSAN) |
| #define __HAVE_ARCH_MEMSET16 |
| static inline void *memset16(uint16_t *s, uint16_t v, size_t n) |
| { |
| @@ -57,6 +62,7 @@ static inline void *memset64(uint64_t *s |
| : "memory"); |
| return s; |
| } |
| +#endif |
| |
| #define __HAVE_ARCH_MEMMOVE |
| void *memmove(void *dest, const void *src, size_t count); |
| _ |