On Fri, 22 Nov 2019 at 12:28, <glider@xxxxxxxxxx> wrote: > > This is needed to allow memory tools like KASAN and KMSAN see the > memory accesses from the checksum code. Without CONFIG_GENERIC_CSUM the > tools can't see memory accesses originating from handwritten assembly > code. > For KASAN it's a question of detecting more bugs, for KMSAN using the C > implementation also helps avoid false positives originating from > seemingly uninitialized checksum values. The files touched are only in x86. The title mentions 'net' -- is this still accurate? > Signed-off-by: Alexander Potapenko <glider@xxxxxxxxxx> > To: Alexander Potapenko <glider@xxxxxxxxxx> > Cc: Arnd Bergmann <arnd@xxxxxxxx> > Cc: Michal Simek <monstr@xxxxxxxxx> > Cc: Andrey Ryabinin <aryabinin@xxxxxxxxxxxxx> > Cc: Vegard Nossum <vegard.nossum@xxxxxxxxxx> > Cc: Dmitry Vyukov <dvyukov@xxxxxxxxxx> > Cc: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> > Cc: linux-mm@xxxxxxxxx > --- > > v2: > - dropped the "default n" (as requested by Randy Dunlap) > > Change-Id: I645e2c097253a8d5717ad87e2e2df6f6f67251f3 > --- > arch/x86/Kconfig | 4 ++++ > arch/x86/include/asm/checksum.h | 10 +++++++--- > arch/x86/lib/Makefile | 2 ++ > 3 files changed, 13 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig > index 3f83a5c53808..f497aae3dbf4 100644 > --- a/arch/x86/Kconfig > +++ b/arch/x86/Kconfig > @@ -272,6 +272,10 @@ config GENERIC_ISA_DMA > def_bool y > depends on ISA_DMA_API > > +config GENERIC_CSUM > + bool > + default y if KMSAN || KASAN When would it be desirable to use GENERIC_CSUM without KMSAN or KASAN? If it is generally a bad idea to disable GENERIC_CSUM with KMSAN and KASAN, does it make more sense to just remove this config option and unconditionally (if CONFIG_K{A,M}SAN) use the asm-generic version in checksum.h? This would simplify this patch and avoid introducing a config option that will likely never be set explicitly. > config GENERIC_BUG > def_bool y > depends on BUG > diff --git a/arch/x86/include/asm/checksum.h b/arch/x86/include/asm/checksum.h > index d79d1e622dcf..ab3464cbce26 100644 > --- a/arch/x86/include/asm/checksum.h > +++ b/arch/x86/include/asm/checksum.h > @@ -1,6 +1,10 @@ > /* SPDX-License-Identifier: GPL-2.0 */ > -#ifdef CONFIG_X86_32 > -# include <asm/checksum_32.h> > +#ifdef CONFIG_GENERIC_CSUM > +# include <asm-generic/checksum.h> > #else > -# include <asm/checksum_64.h> > +# ifdef CONFIG_X86_32 > +# include <asm/checksum_32.h> > +# else > +# include <asm/checksum_64.h> > +# endif > #endif > diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile > index 5246db42de45..bca9031de9ff 100644 > --- a/arch/x86/lib/Makefile > +++ b/arch/x86/lib/Makefile > @@ -55,7 +55,9 @@ endif > lib-$(CONFIG_X86_USE_3DNOW) += mmx_32.o > else > obj-y += iomap_copy_64.o > +ifneq ($(CONFIG_GENERIC_CSUM),y) > lib-y += csum-partial_64.o csum-copy_64.o csum-wrappers_64.o > +endif > lib-y += clear_page_64.o copy_page_64.o > lib-y += memmove_64.o memset_64.o > lib-y += copy_user_64.o Thanks, -- Marco