* Re: [PATCH v9 02/11] powerpc: prepare string/mem functions for KASAN [not found] ` <45fb252fc1b27f2804109fa35ba2882ae29e6035.1551443453.git.christophe.leroy@c-s.fr> @ 2019-03-04 5:26 ` Daniel Axtens 2019-03-06 21:54 ` Christophe Leroy 2019-03-07 6:19 ` Christophe Leroy 0 siblings, 2 replies; 5+ messages in thread From: Daniel Axtens @ 2019-03-04 5:26 UTC (permalink / raw) To: Christophe Leroy, Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman, Nicholas Piggin, Aneesh Kumar K.V, Andrey Ryabinin, Alexander Potapenko, Dmitry Vyukov Cc: linux-kernel, linuxppc-dev, kasan-dev, linux-mm Hi Christophe, > diff --git a/arch/powerpc/include/asm/kasan.h b/arch/powerpc/include/asm/kasan.h > new file mode 100644 > index 000000000000..c3161b8fc017 > --- /dev/null > +++ b/arch/powerpc/include/asm/kasan.h > @@ -0,0 +1,15 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef __ASM_KASAN_H > +#define __ASM_KASAN_H > + > +#ifdef CONFIG_KASAN > +#define _GLOBAL_KASAN(fn) .weak fn ; _GLOBAL(__##fn) ; _GLOBAL(fn) > +#define _GLOBAL_TOC_KASAN(fn) .weak fn ; _GLOBAL_TOC(__##fn) ; _GLOBAL_TOC(fn) > +#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(__##fn) ; EXPORT_SYMBOL(fn) I'm having some trouble with this. I get warnings like this: WARNING: EXPORT symbol "__memcpy" [vmlinux] version generation failed, symbol will not be versioned. It seems to be related to the export line, as if I swap the exports to do fn before __##fn I get: WARNING: EXPORT symbol "memset" [vmlinux] version generation failed, symbol will not be versioned. I have narrowed this down to combining 2 EXPORT_SYMBOL()s on one line. This works - no warning: EXPORT_SYMBOL(memset) EXPORT_SYMBOL(__memset) This throws a warning: EXPORT_SYMBOL(memset) ; EXPORT_SYMBOL(__memset) I notice in looking at the diff of preprocessed source we end up invoking an asm macro that doesn't seem to have a full final argument, I wonder if that's relevant... -___EXPORT_SYMBOL __memset, __memset, ; ___EXPORT_SYMBOL memset, memset, +___EXPORT_SYMBOL __memset, __memset, +___EXPORT_SYMBOL memset, memset, I also notice that nowhere else in the source do people have multiple EXPORT_SYMBOLs on the same line, and other arches seem to just unconditionally export both symbols on multiple lines. I have no idea how this works for you - maybe it's affected by something 32bit. How would you feel about this approach instead? I'm not tied to any of the names or anything. diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h index e0637730a8e7..7b6a91b448dd 100644 --- a/arch/powerpc/include/asm/ppc_asm.h +++ b/arch/powerpc/include/asm/ppc_asm.h @@ -214,6 +214,9 @@ name: \ #define DOTSYM(a) a +#define PROVIDE_WEAK_ALIAS(strongname, weakname) \ + .weak weakname ; .set weakname, strongname ; + #else #define XGLUE(a,b) a##b @@ -236,6 +239,10 @@ GLUE(.,name): #define DOTSYM(a) GLUE(.,a) +#define PROVIDE_WEAK_ALIAS(strongname, weakname) \ + .weak weakname ; .set weakname, strongname ; \ + .weak DOTSYM(weakname) ; .set DOTSYM(weakname), DOTSYM(strongname) ; + #endif #else /* 32-bit */ @@ -251,6 +258,9 @@ GLUE(.,name): #define _GLOBAL_TOC(name) _GLOBAL(name) +#define PROVIDE_WEAK_ALIAS(strongname, weakname) \ + .weak weakname ; .set weakname, strongname ; + #endif /* --- a/arch/powerpc/lib/mem_64.S +++ b/arch/powerpc/lib/mem_64.S @@ -33,7 +33,8 @@ EXPORT_SYMBOL(__memset32) EXPORT_SYMBOL(__memset64) #endif -_GLOBAL_KASAN(memset) +PROVIDE_WEAK_ALIAS(__memset,memset) +_GLOBAL(__memset) neg r0,r3 rlwimi r4,r4,8,16,23 andi. r0,r0,7 /* # bytes to be 8-byte aligned */ @@ -98,9 +99,11 @@ _GLOBAL_KASAN(memset) 10: bflr 31 stb r4,0(r6) blr -EXPORT_SYMBOL_KASAN(memset) +EXPORT_SYMBOL(memset) +EXPORT_SYMBOL(__memset) -_GLOBAL_TOC_KASAN(memmove) +PROVIDE_WEAK_ALIAS(__memmove,memove) +_GLOBAL_TOC(__memmove) cmplw 0,r3,r4 bgt backwards_memcpy b memcpy @@ -141,4 +144,5 @@ _GLOBAL(backwards_memcpy) beq 2b mtctr r7 b 1b -EXPORT_SYMBOL_KASAN(memmove) +EXPORT_SYMBOL(memmove) +EXPORT_SYMBOL(__memmove) diff --git a/arch/powerpc/lib/memcpy_64.S b/arch/powerpc/lib/memcpy_64.S index 862b515b8868..7c1b09556cad 100644 --- a/arch/powerpc/lib/memcpy_64.S +++ b/arch/powerpc/lib/memcpy_64.S @@ -19,7 +19,8 @@ #endif .align 7 -_GLOBAL_TOC_KASAN(memcpy) +PROVIDE_WEAK_ALIAS(__memcpy,memcpy) +_GLOBAL_TOC(__memcpy) BEGIN_FTR_SECTION #ifdef __LITTLE_ENDIAN__ cmpdi cr7,r5,0 @@ -230,4 +231,5 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) 4: ld r3,-STACKFRAMESIZE+STK_REG(R31)(r1) /* return dest pointer */ blr #endif -EXPORT_SYMBOL_KASAN(memcpy) +EXPORT_SYMBOL(__memcpy) +EXPORT_SYMBOL(memcpy) Regards, Daniel > +#else > +#define _GLOBAL_KASAN(fn) _GLOBAL(fn) > +#define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(fn) > +#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(fn) > +#endif > + > +#endif > diff --git a/arch/powerpc/include/asm/string.h b/arch/powerpc/include/asm/string.h > index 1647de15a31e..9bf6dffb4090 100644 > --- a/arch/powerpc/include/asm/string.h > +++ b/arch/powerpc/include/asm/string.h > @@ -4,14 +4,17 @@ > > #ifdef __KERNEL__ > > +#ifndef CONFIG_KASAN > #define __HAVE_ARCH_STRNCPY > #define __HAVE_ARCH_STRNCMP > +#define __HAVE_ARCH_MEMCHR > +#define __HAVE_ARCH_MEMCMP > +#define __HAVE_ARCH_MEMSET16 > +#endif > + > #define __HAVE_ARCH_MEMSET > #define __HAVE_ARCH_MEMCPY > #define __HAVE_ARCH_MEMMOVE > -#define __HAVE_ARCH_MEMCMP > -#define __HAVE_ARCH_MEMCHR > -#define __HAVE_ARCH_MEMSET16 > #define __HAVE_ARCH_MEMCPY_FLUSHCACHE > > extern char * strcpy(char *,const char *); > @@ -27,7 +30,27 @@ extern int memcmp(const void *,const void *,__kernel_size_t); > extern void * memchr(const void *,int,__kernel_size_t); > extern void * memcpy_flushcache(void *,const void *,__kernel_size_t); > > +void *__memset(void *s, int c, __kernel_size_t count); > +void *__memcpy(void *to, const void *from, __kernel_size_t n); > +void *__memmove(void *to, const void *from, __kernel_size_t n); > + > +#if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__) > +/* > + * For files that are not instrumented (e.g. mm/slub.c) we > + * should use not instrumented version of mem* functions. > + */ > +#define memcpy(dst, src, len) __memcpy(dst, src, len) > +#define memmove(dst, src, len) __memmove(dst, src, len) > +#define memset(s, c, n) __memset(s, c, n) > + > +#ifndef __NO_FORTIFY > +#define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */ > +#endif > + > +#endif > + > #ifdef CONFIG_PPC64 > +#ifndef CONFIG_KASAN > #define __HAVE_ARCH_MEMSET32 > #define __HAVE_ARCH_MEMSET64 > > @@ -49,8 +72,11 @@ static inline void *memset64(uint64_t *p, uint64_t v, __kernel_size_t n) > { > return __memset64(p, v, n * 8); > } > +#endif > #else > +#ifndef CONFIG_KASAN > #define __HAVE_ARCH_STRLEN > +#endif > > extern void *memset16(uint16_t *, uint16_t, __kernel_size_t); > #endif > diff --git a/arch/powerpc/kernel/prom_init_check.sh b/arch/powerpc/kernel/prom_init_check.sh > index 667df97d2595..181fd10008ef 100644 > --- a/arch/powerpc/kernel/prom_init_check.sh > +++ b/arch/powerpc/kernel/prom_init_check.sh > @@ -16,8 +16,16 @@ > # If you really need to reference something from prom_init.o add > # it to the list below: > > +grep "^CONFIG_KASAN=y$" .config >/dev/null > +if [ $? -eq 0 ] > +then > + MEM_FUNCS="__memcpy __memset" > +else > + MEM_FUNCS="memcpy memset" > +fi > + > WHITELIST="add_reloc_offset __bss_start __bss_stop copy_and_flush > -_end enter_prom memcpy memset reloc_offset __secondary_hold > +_end enter_prom $MEM_FUNCS reloc_offset __secondary_hold > __secondary_hold_acknowledge __secondary_hold_spinloop __start > strcmp strcpy strlcpy strlen strncmp strstr kstrtobool logo_linux_clut224 > reloc_got2 kernstart_addr memstart_addr linux_banner _stext > diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile > index 79396e184bca..47a4de434c22 100644 > --- a/arch/powerpc/lib/Makefile > +++ b/arch/powerpc/lib/Makefile > @@ -8,9 +8,14 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC) > CFLAGS_REMOVE_code-patching.o = $(CC_FLAGS_FTRACE) > CFLAGS_REMOVE_feature-fixups.o = $(CC_FLAGS_FTRACE) > > -obj-y += string.o alloc.o code-patching.o feature-fixups.o > +obj-y += alloc.o code-patching.o feature-fixups.o > > -obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o strlen_32.o > +ifndef CONFIG_KASAN > +obj-y += string.o memcmp_$(BITS).o > +obj-$(CONFIG_PPC32) += strlen_32.o > +endif > + > +obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o > > obj-$(CONFIG_FUNCTION_ERROR_INJECTION) += error-inject.o > > @@ -34,7 +39,7 @@ obj64-$(CONFIG_KPROBES_SANITY_TEST) += test_emulate_step.o \ > test_emulate_step_exec_instr.o > > obj-y += checksum_$(BITS).o checksum_wrappers.o \ > - string_$(BITS).o memcmp_$(BITS).o > + string_$(BITS).o > > obj-y += sstep.o ldstfp.o quad.o > obj64-y += quad.o > diff --git a/arch/powerpc/lib/copy_32.S b/arch/powerpc/lib/copy_32.S > index ba66846fe973..fc4fa7246200 100644 > --- a/arch/powerpc/lib/copy_32.S > +++ b/arch/powerpc/lib/copy_32.S > @@ -14,6 +14,7 @@ > #include <asm/ppc_asm.h> > #include <asm/export.h> > #include <asm/code-patching-asm.h> > +#include <asm/kasan.h> > > #define COPY_16_BYTES \ > lwz r7,4(r4); \ > @@ -68,6 +69,7 @@ CACHELINE_BYTES = L1_CACHE_BYTES > LG_CACHELINE_BYTES = L1_CACHE_SHIFT > CACHELINE_MASK = (L1_CACHE_BYTES-1) > > +#ifndef CONFIG_KASAN > _GLOBAL(memset16) > rlwinm. r0 ,r5, 31, 1, 31 > addi r6, r3, -4 > @@ -81,6 +83,7 @@ _GLOBAL(memset16) > sth r4, 4(r6) > blr > EXPORT_SYMBOL(memset16) > +#endif > > /* > * Use dcbz on the complete cache lines in the destination > @@ -91,7 +94,7 @@ EXPORT_SYMBOL(memset16) > * We therefore skip the optimised bloc that uses dcbz. This jump is > * replaced by a nop once cache is active. This is done in machine_init() > */ > -_GLOBAL(memset) > +_GLOBAL_KASAN(memset) > cmplwi 0,r5,4 > blt 7f > > @@ -150,7 +153,7 @@ _GLOBAL(memset) > 9: stbu r4,1(r6) > bdnz 9b > blr > -EXPORT_SYMBOL(memset) > +EXPORT_SYMBOL_KASAN(memset) > > /* > * This version uses dcbz on the complete cache lines in the > @@ -163,12 +166,12 @@ EXPORT_SYMBOL(memset) > * We therefore jump to generic_memcpy which doesn't use dcbz. This jump is > * replaced by a nop once cache is active. This is done in machine_init() > */ > -_GLOBAL(memmove) > +_GLOBAL_KASAN(memmove) > cmplw 0,r3,r4 > bgt backwards_memcpy > /* fall through */ > > -_GLOBAL(memcpy) > +_GLOBAL_KASAN(memcpy) > 1: b generic_memcpy > patch_site 1b, patch__memcpy_nocache > > @@ -242,8 +245,8 @@ _GLOBAL(memcpy) > stbu r0,1(r6) > bdnz 40b > 65: blr > -EXPORT_SYMBOL(memcpy) > -EXPORT_SYMBOL(memmove) > +EXPORT_SYMBOL_KASAN(memcpy) > +EXPORT_SYMBOL_KASAN(memmove) > > generic_memcpy: > srwi. r7,r5,3 > diff --git a/arch/powerpc/lib/mem_64.S b/arch/powerpc/lib/mem_64.S > index 3c3be02f33b7..7cd6cf6822a2 100644 > --- a/arch/powerpc/lib/mem_64.S > +++ b/arch/powerpc/lib/mem_64.S > @@ -12,7 +12,9 @@ > #include <asm/errno.h> > #include <asm/ppc_asm.h> > #include <asm/export.h> > +#include <asm/kasan.h> > > +#ifndef CONFIG_KASAN > _GLOBAL(__memset16) > rlwimi r4,r4,16,0,15 > /* fall through */ > @@ -29,8 +31,9 @@ _GLOBAL(__memset64) > EXPORT_SYMBOL(__memset16) > EXPORT_SYMBOL(__memset32) > EXPORT_SYMBOL(__memset64) > +#endif > > -_GLOBAL(memset) > +_GLOBAL_KASAN(memset) > neg r0,r3 > rlwimi r4,r4,8,16,23 > andi. r0,r0,7 /* # bytes to be 8-byte aligned */ > @@ -95,9 +98,9 @@ _GLOBAL(memset) > 10: bflr 31 > stb r4,0(r6) > blr > -EXPORT_SYMBOL(memset) > +EXPORT_SYMBOL_KASAN(memset) > > -_GLOBAL_TOC(memmove) > +_GLOBAL_TOC_KASAN(memmove) > cmplw 0,r3,r4 > bgt backwards_memcpy > b memcpy > @@ -138,4 +141,4 @@ _GLOBAL(backwards_memcpy) > beq 2b > mtctr r7 > b 1b > -EXPORT_SYMBOL(memmove) > +EXPORT_SYMBOL_KASAN(memmove) > diff --git a/arch/powerpc/lib/memcpy_64.S b/arch/powerpc/lib/memcpy_64.S > index 273ea67e60a1..862b515b8868 100644 > --- a/arch/powerpc/lib/memcpy_64.S > +++ b/arch/powerpc/lib/memcpy_64.S > @@ -11,6 +11,7 @@ > #include <asm/export.h> > #include <asm/asm-compat.h> > #include <asm/feature-fixups.h> > +#include <asm/kasan.h> > > #ifndef SELFTEST_CASE > /* For big-endian, 0 == most CPUs, 1 == POWER6, 2 == Cell */ > @@ -18,7 +19,7 @@ > #endif > > .align 7 > -_GLOBAL_TOC(memcpy) > +_GLOBAL_TOC_KASAN(memcpy) > BEGIN_FTR_SECTION > #ifdef __LITTLE_ENDIAN__ > cmpdi cr7,r5,0 > @@ -229,4 +230,4 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) > 4: ld r3,-STACKFRAMESIZE+STK_REG(R31)(r1) /* return dest pointer */ > blr > #endif > -EXPORT_SYMBOL(memcpy) > +EXPORT_SYMBOL_KASAN(memcpy) > -- > 2.13.3 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v9 02/11] powerpc: prepare string/mem functions for KASAN 2019-03-04 5:26 ` [PATCH v9 02/11] powerpc: prepare string/mem functions for KASAN Daniel Axtens @ 2019-03-06 21:54 ` Christophe Leroy 2019-03-08 3:44 ` Daniel Axtens 2019-03-07 6:19 ` Christophe Leroy 1 sibling, 1 reply; 5+ messages in thread From: Christophe Leroy @ 2019-03-06 21:54 UTC (permalink / raw) To: Daniel Axtens, Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman, Nicholas Piggin, Aneesh Kumar K.V, Andrey Ryabinin, Alexander Potapenko, Dmitry Vyukov Cc: linux-kernel, linuxppc-dev, kasan-dev, linux-mm Le 04/03/2019 à 06:26, Daniel Axtens a écrit : > Hi Christophe, >> diff --git a/arch/powerpc/include/asm/kasan.h b/arch/powerpc/include/asm/kasan.h >> new file mode 100644 >> index 000000000000..c3161b8fc017 >> --- /dev/null >> +++ b/arch/powerpc/include/asm/kasan.h >> @@ -0,0 +1,15 @@ >> +/* SPDX-License-Identifier: GPL-2.0 */ >> +#ifndef __ASM_KASAN_H >> +#define __ASM_KASAN_H >> + >> +#ifdef CONFIG_KASAN >> +#define _GLOBAL_KASAN(fn) .weak fn ; _GLOBAL(__##fn) ; _GLOBAL(fn) >> +#define _GLOBAL_TOC_KASAN(fn) .weak fn ; _GLOBAL_TOC(__##fn) ; _GLOBAL_TOC(fn) >> +#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(__##fn) ; EXPORT_SYMBOL(fn) > > I'm having some trouble with this. I get warnings like this: I don't have such problem, neither with ppc32 nor with ppc64e_defconfig. What config are you using ? Another (unrelated) question I have: On the initial arm64 implementation (39d114ddc682 arm64: add KASAN support) they made KASAN implementation depend on SPARSEMEM_VMEMMAP (allthough they later removed that dependency with commit e17d8025f07e arm64/mm/kasan: don't use vmemmap_populate() to initialize shadow) So I'm wondering why on your side, KASAN depends on !SPARSEMEM_VMEMMAP Thanks Christophe > > WARNING: EXPORT symbol "__memcpy" [vmlinux] version generation failed, symbol will not be versioned. > > It seems to be related to the export line, as if I swap the exports to > do fn before __##fn I get: > > WARNING: EXPORT symbol "memset" [vmlinux] version generation failed, symbol will not be versioned. > > I have narrowed this down to combining 2 EXPORT_SYMBOL()s on one line. > This works - no warning: > > EXPORT_SYMBOL(memset) > EXPORT_SYMBOL(__memset) > > This throws a warning: > > EXPORT_SYMBOL(memset) ; EXPORT_SYMBOL(__memset) > > I notice in looking at the diff of preprocessed source we end up > invoking an asm macro that doesn't seem to have a full final argument, I > wonder if that's relevant... > > -___EXPORT_SYMBOL __memset, __memset, ; ___EXPORT_SYMBOL memset, memset, > +___EXPORT_SYMBOL __memset, __memset, > +___EXPORT_SYMBOL memset, memset, > > I also notice that nowhere else in the source do people have multiple > EXPORT_SYMBOLs on the same line, and other arches seem to just > unconditionally export both symbols on multiple lines. > > I have no idea how this works for you - maybe it's affected by something 32bit. > > How would you feel about this approach instead? I'm not tied to any of > the names or anything. > > diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h > index e0637730a8e7..7b6a91b448dd 100644 > --- a/arch/powerpc/include/asm/ppc_asm.h > +++ b/arch/powerpc/include/asm/ppc_asm.h > @@ -214,6 +214,9 @@ name: \ > > #define DOTSYM(a) a > > +#define PROVIDE_WEAK_ALIAS(strongname, weakname) \ > + .weak weakname ; .set weakname, strongname ; > + > #else > > #define XGLUE(a,b) a##b > @@ -236,6 +239,10 @@ GLUE(.,name): > > #define DOTSYM(a) GLUE(.,a) > > +#define PROVIDE_WEAK_ALIAS(strongname, weakname) \ > + .weak weakname ; .set weakname, strongname ; \ > + .weak DOTSYM(weakname) ; .set DOTSYM(weakname), DOTSYM(strongname) ; > + > #endif > > #else /* 32-bit */ > @@ -251,6 +258,9 @@ GLUE(.,name): > > #define _GLOBAL_TOC(name) _GLOBAL(name) > > +#define PROVIDE_WEAK_ALIAS(strongname, weakname) \ > + .weak weakname ; .set weakname, strongname ; > + > #endif > > /* > --- a/arch/powerpc/lib/mem_64.S > +++ b/arch/powerpc/lib/mem_64.S > @@ -33,7 +33,8 @@ EXPORT_SYMBOL(__memset32) > EXPORT_SYMBOL(__memset64) > #endif > > -_GLOBAL_KASAN(memset) > +PROVIDE_WEAK_ALIAS(__memset,memset) > +_GLOBAL(__memset) > neg r0,r3 > rlwimi r4,r4,8,16,23 > andi. r0,r0,7 /* # bytes to be 8-byte aligned */ > @@ -98,9 +99,11 @@ _GLOBAL_KASAN(memset) > 10: bflr 31 > stb r4,0(r6) > blr > -EXPORT_SYMBOL_KASAN(memset) > +EXPORT_SYMBOL(memset) > +EXPORT_SYMBOL(__memset) > > -_GLOBAL_TOC_KASAN(memmove) > +PROVIDE_WEAK_ALIAS(__memmove,memove) > +_GLOBAL_TOC(__memmove) > cmplw 0,r3,r4 > bgt backwards_memcpy > b memcpy > @@ -141,4 +144,5 @@ _GLOBAL(backwards_memcpy) > beq 2b > mtctr r7 > b 1b > -EXPORT_SYMBOL_KASAN(memmove) > +EXPORT_SYMBOL(memmove) > +EXPORT_SYMBOL(__memmove) > diff --git a/arch/powerpc/lib/memcpy_64.S b/arch/powerpc/lib/memcpy_64.S > index 862b515b8868..7c1b09556cad 100644 > --- a/arch/powerpc/lib/memcpy_64.S > +++ b/arch/powerpc/lib/memcpy_64.S > @@ -19,7 +19,8 @@ > #endif > > .align 7 > -_GLOBAL_TOC_KASAN(memcpy) > +PROVIDE_WEAK_ALIAS(__memcpy,memcpy) > +_GLOBAL_TOC(__memcpy) > BEGIN_FTR_SECTION > #ifdef __LITTLE_ENDIAN__ > cmpdi cr7,r5,0 > @@ -230,4 +231,5 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) > 4: ld r3,-STACKFRAMESIZE+STK_REG(R31)(r1) /* return dest pointer */ > blr > #endif > -EXPORT_SYMBOL_KASAN(memcpy) > +EXPORT_SYMBOL(__memcpy) > +EXPORT_SYMBOL(memcpy) > > > Regards, > Daniel > > >> +#else >> +#define _GLOBAL_KASAN(fn) _GLOBAL(fn) >> +#define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(fn) >> +#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(fn) >> +#endif >> + >> +#endif >> diff --git a/arch/powerpc/include/asm/string.h b/arch/powerpc/include/asm/string.h >> index 1647de15a31e..9bf6dffb4090 100644 >> --- a/arch/powerpc/include/asm/string.h >> +++ b/arch/powerpc/include/asm/string.h >> @@ -4,14 +4,17 @@ >> >> #ifdef __KERNEL__ >> >> +#ifndef CONFIG_KASAN >> #define __HAVE_ARCH_STRNCPY >> #define __HAVE_ARCH_STRNCMP >> +#define __HAVE_ARCH_MEMCHR >> +#define __HAVE_ARCH_MEMCMP >> +#define __HAVE_ARCH_MEMSET16 >> +#endif >> + >> #define __HAVE_ARCH_MEMSET >> #define __HAVE_ARCH_MEMCPY >> #define __HAVE_ARCH_MEMMOVE >> -#define __HAVE_ARCH_MEMCMP >> -#define __HAVE_ARCH_MEMCHR >> -#define __HAVE_ARCH_MEMSET16 >> #define __HAVE_ARCH_MEMCPY_FLUSHCACHE >> >> extern char * strcpy(char *,const char *); >> @@ -27,7 +30,27 @@ extern int memcmp(const void *,const void *,__kernel_size_t); >> extern void * memchr(const void *,int,__kernel_size_t); >> extern void * memcpy_flushcache(void *,const void *,__kernel_size_t); >> >> +void *__memset(void *s, int c, __kernel_size_t count); >> +void *__memcpy(void *to, const void *from, __kernel_size_t n); >> +void *__memmove(void *to, const void *from, __kernel_size_t n); >> + >> +#if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__) >> +/* >> + * For files that are not instrumented (e.g. mm/slub.c) we >> + * should use not instrumented version of mem* functions. >> + */ >> +#define memcpy(dst, src, len) __memcpy(dst, src, len) >> +#define memmove(dst, src, len) __memmove(dst, src, len) >> +#define memset(s, c, n) __memset(s, c, n) >> + >> +#ifndef __NO_FORTIFY >> +#define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */ >> +#endif >> + >> +#endif >> + >> #ifdef CONFIG_PPC64 >> +#ifndef CONFIG_KASAN >> #define __HAVE_ARCH_MEMSET32 >> #define __HAVE_ARCH_MEMSET64 >> >> @@ -49,8 +72,11 @@ static inline void *memset64(uint64_t *p, uint64_t v, __kernel_size_t n) >> { >> return __memset64(p, v, n * 8); >> } >> +#endif >> #else >> +#ifndef CONFIG_KASAN >> #define __HAVE_ARCH_STRLEN >> +#endif >> >> extern void *memset16(uint16_t *, uint16_t, __kernel_size_t); >> #endif >> diff --git a/arch/powerpc/kernel/prom_init_check.sh b/arch/powerpc/kernel/prom_init_check.sh >> index 667df97d2595..181fd10008ef 100644 >> --- a/arch/powerpc/kernel/prom_init_check.sh >> +++ b/arch/powerpc/kernel/prom_init_check.sh >> @@ -16,8 +16,16 @@ >> # If you really need to reference something from prom_init.o add >> # it to the list below: >> >> +grep "^CONFIG_KASAN=y$" .config >/dev/null >> +if [ $? -eq 0 ] >> +then >> + MEM_FUNCS="__memcpy __memset" >> +else >> + MEM_FUNCS="memcpy memset" >> +fi >> + >> WHITELIST="add_reloc_offset __bss_start __bss_stop copy_and_flush >> -_end enter_prom memcpy memset reloc_offset __secondary_hold >> +_end enter_prom $MEM_FUNCS reloc_offset __secondary_hold >> __secondary_hold_acknowledge __secondary_hold_spinloop __start >> strcmp strcpy strlcpy strlen strncmp strstr kstrtobool logo_linux_clut224 >> reloc_got2 kernstart_addr memstart_addr linux_banner _stext >> diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile >> index 79396e184bca..47a4de434c22 100644 >> --- a/arch/powerpc/lib/Makefile >> +++ b/arch/powerpc/lib/Makefile >> @@ -8,9 +8,14 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC) >> CFLAGS_REMOVE_code-patching.o = $(CC_FLAGS_FTRACE) >> CFLAGS_REMOVE_feature-fixups.o = $(CC_FLAGS_FTRACE) >> >> -obj-y += string.o alloc.o code-patching.o feature-fixups.o >> +obj-y += alloc.o code-patching.o feature-fixups.o >> >> -obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o strlen_32.o >> +ifndef CONFIG_KASAN >> +obj-y += string.o memcmp_$(BITS).o >> +obj-$(CONFIG_PPC32) += strlen_32.o >> +endif >> + >> +obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o >> >> obj-$(CONFIG_FUNCTION_ERROR_INJECTION) += error-inject.o >> >> @@ -34,7 +39,7 @@ obj64-$(CONFIG_KPROBES_SANITY_TEST) += test_emulate_step.o \ >> test_emulate_step_exec_instr.o >> >> obj-y += checksum_$(BITS).o checksum_wrappers.o \ >> - string_$(BITS).o memcmp_$(BITS).o >> + string_$(BITS).o >> >> obj-y += sstep.o ldstfp.o quad.o >> obj64-y += quad.o >> diff --git a/arch/powerpc/lib/copy_32.S b/arch/powerpc/lib/copy_32.S >> index ba66846fe973..fc4fa7246200 100644 >> --- a/arch/powerpc/lib/copy_32.S >> +++ b/arch/powerpc/lib/copy_32.S >> @@ -14,6 +14,7 @@ >> #include <asm/ppc_asm.h> >> #include <asm/export.h> >> #include <asm/code-patching-asm.h> >> +#include <asm/kasan.h> >> >> #define COPY_16_BYTES \ >> lwz r7,4(r4); \ >> @@ -68,6 +69,7 @@ CACHELINE_BYTES = L1_CACHE_BYTES >> LG_CACHELINE_BYTES = L1_CACHE_SHIFT >> CACHELINE_MASK = (L1_CACHE_BYTES-1) >> >> +#ifndef CONFIG_KASAN >> _GLOBAL(memset16) >> rlwinm. r0 ,r5, 31, 1, 31 >> addi r6, r3, -4 >> @@ -81,6 +83,7 @@ _GLOBAL(memset16) >> sth r4, 4(r6) >> blr >> EXPORT_SYMBOL(memset16) >> +#endif >> >> /* >> * Use dcbz on the complete cache lines in the destination >> @@ -91,7 +94,7 @@ EXPORT_SYMBOL(memset16) >> * We therefore skip the optimised bloc that uses dcbz. This jump is >> * replaced by a nop once cache is active. This is done in machine_init() >> */ >> -_GLOBAL(memset) >> +_GLOBAL_KASAN(memset) >> cmplwi 0,r5,4 >> blt 7f >> >> @@ -150,7 +153,7 @@ _GLOBAL(memset) >> 9: stbu r4,1(r6) >> bdnz 9b >> blr >> -EXPORT_SYMBOL(memset) >> +EXPORT_SYMBOL_KASAN(memset) >> >> /* >> * This version uses dcbz on the complete cache lines in the >> @@ -163,12 +166,12 @@ EXPORT_SYMBOL(memset) >> * We therefore jump to generic_memcpy which doesn't use dcbz. This jump is >> * replaced by a nop once cache is active. This is done in machine_init() >> */ >> -_GLOBAL(memmove) >> +_GLOBAL_KASAN(memmove) >> cmplw 0,r3,r4 >> bgt backwards_memcpy >> /* fall through */ >> >> -_GLOBAL(memcpy) >> +_GLOBAL_KASAN(memcpy) >> 1: b generic_memcpy >> patch_site 1b, patch__memcpy_nocache >> >> @@ -242,8 +245,8 @@ _GLOBAL(memcpy) >> stbu r0,1(r6) >> bdnz 40b >> 65: blr >> -EXPORT_SYMBOL(memcpy) >> -EXPORT_SYMBOL(memmove) >> +EXPORT_SYMBOL_KASAN(memcpy) >> +EXPORT_SYMBOL_KASAN(memmove) >> >> generic_memcpy: >> srwi. r7,r5,3 >> diff --git a/arch/powerpc/lib/mem_64.S b/arch/powerpc/lib/mem_64.S >> index 3c3be02f33b7..7cd6cf6822a2 100644 >> --- a/arch/powerpc/lib/mem_64.S >> +++ b/arch/powerpc/lib/mem_64.S >> @@ -12,7 +12,9 @@ >> #include <asm/errno.h> >> #include <asm/ppc_asm.h> >> #include <asm/export.h> >> +#include <asm/kasan.h> >> >> +#ifndef CONFIG_KASAN >> _GLOBAL(__memset16) >> rlwimi r4,r4,16,0,15 >> /* fall through */ >> @@ -29,8 +31,9 @@ _GLOBAL(__memset64) >> EXPORT_SYMBOL(__memset16) >> EXPORT_SYMBOL(__memset32) >> EXPORT_SYMBOL(__memset64) >> +#endif >> >> -_GLOBAL(memset) >> +_GLOBAL_KASAN(memset) >> neg r0,r3 >> rlwimi r4,r4,8,16,23 >> andi. r0,r0,7 /* # bytes to be 8-byte aligned */ >> @@ -95,9 +98,9 @@ _GLOBAL(memset) >> 10: bflr 31 >> stb r4,0(r6) >> blr >> -EXPORT_SYMBOL(memset) >> +EXPORT_SYMBOL_KASAN(memset) >> >> -_GLOBAL_TOC(memmove) >> +_GLOBAL_TOC_KASAN(memmove) >> cmplw 0,r3,r4 >> bgt backwards_memcpy >> b memcpy >> @@ -138,4 +141,4 @@ _GLOBAL(backwards_memcpy) >> beq 2b >> mtctr r7 >> b 1b >> -EXPORT_SYMBOL(memmove) >> +EXPORT_SYMBOL_KASAN(memmove) >> diff --git a/arch/powerpc/lib/memcpy_64.S b/arch/powerpc/lib/memcpy_64.S >> index 273ea67e60a1..862b515b8868 100644 >> --- a/arch/powerpc/lib/memcpy_64.S >> +++ b/arch/powerpc/lib/memcpy_64.S >> @@ -11,6 +11,7 @@ >> #include <asm/export.h> >> #include <asm/asm-compat.h> >> #include <asm/feature-fixups.h> >> +#include <asm/kasan.h> >> >> #ifndef SELFTEST_CASE >> /* For big-endian, 0 == most CPUs, 1 == POWER6, 2 == Cell */ >> @@ -18,7 +19,7 @@ >> #endif >> >> .align 7 >> -_GLOBAL_TOC(memcpy) >> +_GLOBAL_TOC_KASAN(memcpy) >> BEGIN_FTR_SECTION >> #ifdef __LITTLE_ENDIAN__ >> cmpdi cr7,r5,0 >> @@ -229,4 +230,4 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) >> 4: ld r3,-STACKFRAMESIZE+STK_REG(R31)(r1) /* return dest pointer */ >> blr >> #endif >> -EXPORT_SYMBOL(memcpy) >> +EXPORT_SYMBOL_KASAN(memcpy) >> -- >> 2.13.3 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v9 02/11] powerpc: prepare string/mem functions for KASAN 2019-03-06 21:54 ` Christophe Leroy @ 2019-03-08 3:44 ` Daniel Axtens 0 siblings, 0 replies; 5+ messages in thread From: Daniel Axtens @ 2019-03-08 3:44 UTC (permalink / raw) To: Christophe Leroy, Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman, Nicholas Piggin, Aneesh Kumar K.V, Andrey Ryabinin, Alexander Potapenko, Dmitry Vyukov Cc: linux-kernel, linuxppc-dev, kasan-dev, linux-mm [-- Attachment #1: Type: text/plain, Size: 1744 bytes --] Christophe Leroy <christophe.leroy@c-s.fr> writes: > Le 04/03/2019 à 06:26, Daniel Axtens a écrit : >> Hi Christophe, >>> diff --git a/arch/powerpc/include/asm/kasan.h b/arch/powerpc/include/asm/kasan.h >>> new file mode 100644 >>> index 000000000000..c3161b8fc017 >>> --- /dev/null >>> +++ b/arch/powerpc/include/asm/kasan.h >>> @@ -0,0 +1,15 @@ >>> +/* SPDX-License-Identifier: GPL-2.0 */ >>> +#ifndef __ASM_KASAN_H >>> +#define __ASM_KASAN_H >>> + >>> +#ifdef CONFIG_KASAN >>> +#define _GLOBAL_KASAN(fn) .weak fn ; _GLOBAL(__##fn) ; _GLOBAL(fn) >>> +#define _GLOBAL_TOC_KASAN(fn) .weak fn ; _GLOBAL_TOC(__##fn) ; _GLOBAL_TOC(fn) >>> +#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(__##fn) ; EXPORT_SYMBOL(fn) >> >> I'm having some trouble with this. I get warnings like this: > > I don't have such problem, neither with ppc32 nor with ppc64e_defconfig. > Fascinating, I'll dig into that more. > What config are you using ? Attached, it's based on the one provided with the SDK for the T4240RDB. > Another (unrelated) question I have: > On the initial arm64 implementation (39d114ddc682 arm64: add KASAN > support) they made KASAN implementation depend on SPARSEMEM_VMEMMAP > (allthough they later removed that dependency with commit e17d8025f07e > arm64/mm/kasan: don't use vmemmap_populate() to initialize shadow) > > So I'm wondering why on your side, KASAN depends on !SPARSEMEM_VMEMMAP I use the vmemmap area as the shadow region for kasan, in a way that takes absolutely no account of any other use. It's very possible that I could instead do something similar to what arm64 used to do - I think one of the previous ppc64 approaches did something similar too. Regards, Daniel [-- Attachment #2: .config --] [-- Type: application/octet-stream, Size: 86167 bytes --] # # Automatically generated file; DO NOT EDIT. # Linux/powerpc 5.0.0-rc2 Kernel Configuration # # # Compiler: powerpc64-linux-gnu-gcc (Ubuntu 8.2.0-7ubuntu1) 8.2.0 # CONFIG_CC_IS_GCC=y CONFIG_GCC_VERSION=80200 CONFIG_CLANG_VERSION=0 CONFIG_CC_HAS_ASM_GOTO=y CONFIG_CONSTRUCTORS=y CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_EXTABLE_SORT=y CONFIG_THREAD_INFO_IN_TASK=y # # General setup # CONFIG_INIT_ENV_ARG_LIMIT=32 # CONFIG_COMPILE_TEST is not set CONFIG_LOCALVERSION="" CONFIG_LOCALVERSION_AUTO=y CONFIG_BUILD_SALT="" CONFIG_HAVE_KERNEL_GZIP=y CONFIG_KERNEL_GZIP=y CONFIG_DEFAULT_HOSTNAME="(none)" CONFIG_SWAP=y CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y CONFIG_POSIX_MQUEUE=y CONFIG_POSIX_MQUEUE_SYSCTL=y CONFIG_CROSS_MEMORY_ATTACH=y CONFIG_USELIB=y CONFIG_AUDIT=y CONFIG_HAVE_ARCH_AUDITSYSCALL=y CONFIG_AUDITSYSCALL=y # # IRQ subsystem # CONFIG_GENERIC_IRQ_SHOW=y CONFIG_GENERIC_IRQ_SHOW_LEVEL=y CONFIG_GENERIC_IRQ_MIGRATION=y CONFIG_IRQ_DOMAIN=y CONFIG_GENERIC_MSI_IRQ=y CONFIG_IRQ_FORCED_THREADING=y CONFIG_SPARSE_IRQ=y # CONFIG_GENERIC_IRQ_DEBUGFS is not set CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_ARCH_HAS_TICK_BROADCAST=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y CONFIG_GENERIC_CMOS_UPDATE=y # # Timers subsystem # CONFIG_TICK_ONESHOT=y CONFIG_NO_HZ_COMMON=y # CONFIG_HZ_PERIODIC is not set CONFIG_NO_HZ_IDLE=y # CONFIG_NO_HZ_FULL is not set CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y CONFIG_PREEMPT_NONE=y # CONFIG_PREEMPT_VOLUNTARY is not set # CONFIG_PREEMPT is not set # # CPU/Task time and stats accounting # CONFIG_VIRT_CPU_ACCOUNTING=y # CONFIG_TICK_CPU_ACCOUNTING is not set CONFIG_VIRT_CPU_ACCOUNTING_NATIVE=y # CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set CONFIG_BSD_PROCESS_ACCT=y # CONFIG_BSD_PROCESS_ACCT_V3 is not set # CONFIG_TASKSTATS is not set # CONFIG_PSI is not set CONFIG_CPU_ISOLATION=y # # RCU Subsystem # CONFIG_TREE_RCU=y # CONFIG_RCU_EXPERT is not set CONFIG_SRCU=y CONFIG_TREE_SRCU=y CONFIG_RCU_STALL_COMMON=y CONFIG_RCU_NEED_SEGCBLIST=y CONFIG_BUILD_BIN2C=y CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y CONFIG_LOG_BUF_SHIFT=17 CONFIG_LOG_CPU_MAX_BUF_SHIFT=14 CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=14 CONFIG_CGROUPS=y CONFIG_PAGE_COUNTER=y CONFIG_MEMCG=y # CONFIG_MEMCG_SWAP is not set CONFIG_MEMCG_KMEM=y CONFIG_BLK_CGROUP=y # CONFIG_DEBUG_BLK_CGROUP is not set CONFIG_CGROUP_WRITEBACK=y CONFIG_CGROUP_SCHED=y CONFIG_FAIR_GROUP_SCHED=y CONFIG_CFS_BANDWIDTH=y # CONFIG_RT_GROUP_SCHED is not set CONFIG_CGROUP_PIDS=y # CONFIG_CGROUP_RDMA is not set # CONFIG_CGROUP_FREEZER is not set # CONFIG_CGROUP_HUGETLB is not set # CONFIG_CPUSETS is not set # CONFIG_CGROUP_DEVICE is not set CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_PERF=y # CONFIG_CGROUP_DEBUG is not set CONFIG_NAMESPACES=y CONFIG_UTS_NS=y CONFIG_IPC_NS=y # CONFIG_USER_NS is not set CONFIG_PID_NS=y CONFIG_NET_NS=y # CONFIG_CHECKPOINT_RESTORE is not set # CONFIG_SCHED_AUTOGROUP is not set # CONFIG_SYSFS_DEPRECATED is not set # CONFIG_RELAY is not set CONFIG_BLK_DEV_INITRD=y CONFIG_INITRAMFS_SOURCE="" CONFIG_RD_GZIP=y CONFIG_RD_BZIP2=y CONFIG_RD_LZMA=y CONFIG_RD_XZ=y CONFIG_RD_LZO=y CONFIG_RD_LZ4=y CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION=y # CONFIG_LD_DEAD_CODE_DATA_ELIMINATION is not set CONFIG_SYSCTL=y CONFIG_ANON_INODES=y CONFIG_SYSCTL_EXCEPTION_TRACE=y CONFIG_BPF=y CONFIG_EXPERT=y CONFIG_MULTIUSER=y CONFIG_SGETMASK_SYSCALL=y CONFIG_SYSFS_SYSCALL=y # CONFIG_SYSCTL_SYSCALL is not set # CONFIG_FHANDLE is not set CONFIG_POSIX_TIMERS=y CONFIG_PRINTK=y CONFIG_PRINTK_NMI=y CONFIG_BUG=y CONFIG_ELF_CORE=y CONFIG_BASE_FULL=y CONFIG_FUTEX=y CONFIG_FUTEX_PI=y CONFIG_EPOLL=y CONFIG_SIGNALFD=y CONFIG_TIMERFD=y CONFIG_EVENTFD=y CONFIG_SHMEM=y CONFIG_AIO=y CONFIG_ADVISE_SYSCALLS=y CONFIG_MEMBARRIER=y CONFIG_KALLSYMS=y CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_BASE_RELATIVE=y # CONFIG_BPF_SYSCALL is not set # CONFIG_USERFAULTFD is not set CONFIG_ARCH_HAS_MEMBARRIER_CALLBACKS=y CONFIG_RSEQ=y # CONFIG_DEBUG_RSEQ is not set CONFIG_EMBEDDED=y CONFIG_HAVE_PERF_EVENTS=y # CONFIG_PC104 is not set # # Kernel Performance Events And Counters # CONFIG_PERF_EVENTS=y CONFIG_VM_EVENT_COUNTERS=y # CONFIG_COMPAT_BRK is not set CONFIG_SLAB=y # CONFIG_SLUB is not set # CONFIG_SLOB is not set CONFIG_SLAB_MERGE_DEFAULT=y # CONFIG_SLAB_FREELIST_RANDOM is not set # CONFIG_PROFILING is not set CONFIG_TRACEPOINTS=y CONFIG_PPC64=y # # Processor support # # CONFIG_PPC_BOOK3S_64 is not set CONFIG_PPC_BOOK3E_64=y # CONFIG_GENERIC_CPU is not set # CONFIG_E5500_CPU is not set CONFIG_E6500_CPU=y CONFIG_TARGET_CPU_BOOL=y CONFIG_PPC_BOOK3E=y CONFIG_E500=y CONFIG_PPC_E500MC=y CONFIG_PPC_FPU=y CONFIG_FSL_EMB_PERFMON=y CONFIG_FSL_EMB_PERF_EVENT=y CONFIG_FSL_EMB_PERF_EVENT_E500=y CONFIG_BOOKE=y CONFIG_PPC_FSL_BOOK3E=y CONFIG_PTE_64BIT=y CONFIG_PHYS_64BIT=y CONFIG_ALTIVEC=y CONFIG_PPC_MMU_NOHASH=y CONFIG_PPC_BOOK3E_MMU=y CONFIG_SMP=y CONFIG_NR_CPUS=24 CONFIG_PPC_DOORBELL=y CONFIG_VDSO32=y CONFIG_CPU_BIG_ENDIAN=y CONFIG_64BIT=y CONFIG_MMU=y CONFIG_ARCH_MMAP_RND_BITS_MAX=32 CONFIG_ARCH_MMAP_RND_BITS_MIN=18 CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=17 CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11 CONFIG_HAVE_SETUP_PER_CPU_AREA=y CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y CONFIG_NR_IRQS=512 CONFIG_STACKTRACE_SUPPORT=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_GENERIC_HWEIGHT=y CONFIG_PPC=y CONFIG_PPC_BARRIER_NOSPEC=y CONFIG_EARLY_PRINTK=y CONFIG_PANIC_TIMEOUT=180 CONFIG_COMPAT=y CONFIG_SYSVIPC_COMPAT=y CONFIG_SCHED_OMIT_FRAME_POINTER=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y CONFIG_PPC_UDBG_16550=y CONFIG_AUDIT_ARCH=y CONFIG_GENERIC_BUG=y CONFIG_DEFAULT_UIMAGE=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_ARCH_SUPPORTS_UPROBES=y CONFIG_PPC_ADV_DEBUG_REGS=y CONFIG_PPC_ADV_DEBUG_IACS=2 CONFIG_PPC_ADV_DEBUG_DACS=2 CONFIG_PPC_ADV_DEBUG_DVCS=0 CONFIG_ZONE_DMA=y CONFIG_PGTABLE_LEVELS=4 CONFIG_PPC_MSI_BITMAP=y CONFIG_FSL_CORENET_RCPM=y # # Platform support # CONFIG_FSL_SOC_BOOKE=y # CONFIG_PPC_QEMU_E500 is not set CONFIG_CORENET_GENERIC=y # CONFIG_KVM_GUEST is not set CONFIG_EPAPR_PARAVIRT=y # CONFIG_PPC_OF_BOOT_TRAMPOLINE is not set CONFIG_PPC_SMP_MUXED_IPI=y CONFIG_MPIC=y # CONFIG_MPIC_TIMER is not set CONFIG_PPC_EPAPR_HV_PIC=y # CONFIG_MPIC_MSGR is not set # # CPU Frequency scaling # # CONFIG_CPU_FREQ is not set # # CPUIdle driver # # # CPU Idle # # CONFIG_CPU_IDLE is not set # CONFIG_GEN_RTC is not set # CONFIG_SIMPLE_GPIO is not set # # Kernel options # # CONFIG_HZ_100 is not set CONFIG_HZ_250=y # CONFIG_HZ_300 is not set # CONFIG_HZ_1000 is not set CONFIG_HZ=250 CONFIG_SCHED_HRTICK=y CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y CONFIG_MATH_EMULATION=y # CONFIG_MATH_EMULATION_FULL is not set CONFIG_MATH_EMULATION_HW_UNIMPLEMENTED=y # CONFIG_LD_HEAD_STUB_CATCH is not set # CONFIG_HOTPLUG_CPU is not set CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y # CONFIG_KEXEC is not set # CONFIG_KEXEC_FILE is not set # CONFIG_RELOCATABLE is not set # CONFIG_CRASH_DUMP is not set CONFIG_IRQ_ALL_CPUS=y # CONFIG_NUMA is not set CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_ARCH_FLATMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_SYS_SUPPORTS_HUGETLBFS=y CONFIG_ILLEGAL_POINTER_VALUE=0x5deadbeef0000000 CONFIG_PPC_4K_PAGES=y CONFIG_PPC_PAGE_SHIFT=12 CONFIG_THREAD_SHIFT=14 CONFIG_ETEXT_SHIFT=12 CONFIG_DATA_SHIFT=12 CONFIG_FORCE_MAX_ZONEORDER=13 # CONFIG_SCHED_SMT is not set # CONFIG_CMDLINE_BOOL is not set CONFIG_EXTRA_TARGETS="" # CONFIG_HIBERNATION is not set # CONFIG_PM is not set CONFIG_SECCOMP=y CONFIG_ISA_DMA_API=y # # Bus options # CONFIG_GENERIC_ISA_DMA=y CONFIG_PPC_INDIRECT_PCI=y CONFIG_FSL_SOC=y CONFIG_FSL_PCI=y CONFIG_FSL_LBC=y CONFIG_PAGE_OFFSET=0xc000000000000000 CONFIG_KERNEL_START=0xc000000000000000 CONFIG_PHYSICAL_START=0x00000000 CONFIG_HAVE_KVM_EVENTFD=y CONFIG_KVM_MMIO=y CONFIG_KVM_VFIO=y CONFIG_KVM_COMPAT=y CONFIG_HAVE_KVM_IRQ_BYPASS=y CONFIG_HAVE_KVM_VCPU_ASYNC_IOCTL=y CONFIG_VIRTUALIZATION=y CONFIG_KVM=y CONFIG_KVM_BOOKE_HV=y # CONFIG_KVM_EXIT_TIMING is not set CONFIG_KVM_E500MC=y # CONFIG_KVM_MPIC is not set CONFIG_VHOST_NET=m CONFIG_VHOST=m # CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set # # General architecture-dependent options # CONFIG_CRASH_CORE=y CONFIG_HAVE_OPROFILE=y CONFIG_KPROBES=y CONFIG_JUMP_LABEL=y CONFIG_STATIC_KEYS_SELFTEST=y CONFIG_OPTPROBES=y CONFIG_UPROBES=y CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y CONFIG_ARCH_USE_BUILTIN_BSWAP=y CONFIG_KRETPROBES=y CONFIG_HAVE_IOREMAP_PROT=y CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y CONFIG_HAVE_OPTPROBES=y CONFIG_HAVE_KPROBES_ON_FTRACE=y CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y CONFIG_HAVE_NMI=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_GENERIC_SMP_IDLE_THREAD=y CONFIG_ARCH_HAS_FORTIFY_SOURCE=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_RSEQ=y CONFIG_HAVE_CLK=y CONFIG_HAVE_PERF_EVENTS_NMI=y CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y CONFIG_HAVE_PERF_REGS=y CONFIG_HAVE_PERF_USER_STACK_DUMP=y CONFIG_HAVE_ARCH_JUMP_LABEL=y CONFIG_HAVE_RCU_TABLE_FREE=y CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y CONFIG_ARCH_WEAK_RELEASE_ACQUIRE=y CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_SECCOMP_FILTER=y CONFIG_HAVE_STACKPROTECTOR=y CONFIG_CC_HAS_STACKPROTECTOR_NONE=y CONFIG_STACKPROTECTOR=y CONFIG_STACKPROTECTOR_STRONG=y CONFIG_HAVE_CONTEXT_TRACKING=y CONFIG_HAVE_VIRT_CPU_ACCOUNTING=y CONFIG_ARCH_HAS_SCALED_CPUTIME=y CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_MOD_ARCH_SPECIFIC=y CONFIG_MODULES_USE_ELF_RELA=y CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y CONFIG_ARCH_HAS_ELF_RANDOMIZE=y CONFIG_HAVE_ARCH_MMAP_RND_BITS=y CONFIG_ARCH_MMAP_RND_BITS=18 CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11 CONFIG_CLONE_BACKWARDS=y CONFIG_OLD_SIGSUSPEND=y CONFIG_COMPAT_OLD_SIGACTION=y CONFIG_COMPAT_32BIT_TIME=y CONFIG_ARCH_HAS_PHYS_TO_DMA=y # CONFIG_REFCOUNT_FULL is not set # # GCOV-based kernel profiling # # CONFIG_GCOV_KERNEL is not set CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y CONFIG_PLUGIN_HOSTCC="" CONFIG_HAVE_GCC_PLUGINS=y CONFIG_RT_MUTEXES=y CONFIG_BASE_SMALL=0 CONFIG_MODULES=y # CONFIG_MODULE_FORCE_LOAD is not set CONFIG_MODULE_UNLOAD=y CONFIG_MODULE_FORCE_UNLOAD=y CONFIG_MODVERSIONS=y # CONFIG_MODULE_SRCVERSION_ALL is not set # CONFIG_MODULE_SIG is not set # CONFIG_MODULE_COMPRESS is not set # CONFIG_TRIM_UNUSED_KSYMS is not set CONFIG_MODULES_TREE_LOOKUP=y CONFIG_BLOCK=y CONFIG_BLK_SCSI_REQUEST=y # CONFIG_BLK_DEV_BSG is not set # CONFIG_BLK_DEV_BSGLIB is not set # CONFIG_BLK_DEV_INTEGRITY is not set # CONFIG_BLK_DEV_ZONED is not set # CONFIG_BLK_DEV_THROTTLING is not set # CONFIG_BLK_CMDLINE_PARSER is not set # CONFIG_BLK_WBT is not set # CONFIG_BLK_CGROUP_IOLATENCY is not set CONFIG_BLK_DEBUG_FS=y # CONFIG_BLK_SED_OPAL is not set # # Partition Types # CONFIG_PARTITION_ADVANCED=y # CONFIG_ACORN_PARTITION is not set # CONFIG_AIX_PARTITION is not set # CONFIG_OSF_PARTITION is not set # CONFIG_AMIGA_PARTITION is not set # CONFIG_ATARI_PARTITION is not set CONFIG_MAC_PARTITION=y CONFIG_MSDOS_PARTITION=y # CONFIG_BSD_DISKLABEL is not set # CONFIG_MINIX_SUBPARTITION is not set # CONFIG_SOLARIS_X86_PARTITION is not set # CONFIG_UNIXWARE_DISKLABEL is not set # CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set # CONFIG_KARMA_PARTITION is not set CONFIG_EFI_PARTITION=y # CONFIG_SYSV68_PARTITION is not set # CONFIG_CMDLINE_PARTITION is not set CONFIG_BLOCK_COMPAT=y CONFIG_BLK_MQ_PCI=y # # IO Schedulers # CONFIG_MQ_IOSCHED_DEADLINE=y CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_IOSCHED_BFQ is not set CONFIG_PREEMPT_NOTIFIERS=y CONFIG_ASN1=y CONFIG_INLINE_SPIN_UNLOCK_IRQ=y CONFIG_INLINE_READ_UNLOCK=y CONFIG_INLINE_READ_UNLOCK_IRQ=y CONFIG_INLINE_WRITE_UNLOCK=y CONFIG_INLINE_WRITE_UNLOCK_IRQ=y CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_RWSEM_SPIN_ON_OWNER=y CONFIG_LOCK_SPIN_ON_OWNER=y # # Executable file formats # CONFIG_BINFMT_ELF=y CONFIG_COMPAT_BINFMT_ELF=y CONFIG_ELFCORE=y # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set CONFIG_BINFMT_SCRIPT=y CONFIG_BINFMT_MISC=m CONFIG_COREDUMP=y # # Memory Management options # CONFIG_SELECT_MEMORY_MODEL=y CONFIG_FLATMEM_MANUAL=y # CONFIG_SPARSEMEM_MANUAL is not set CONFIG_FLATMEM=y CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y CONFIG_HAVE_MEMBLOCK_NODE_MAP=y CONFIG_HAVE_GENERIC_GUP=y CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_COMPACTION=y CONFIG_MIGRATION=y CONFIG_PHYS_ADDR_T_64BIT=y CONFIG_BOUNCE=y CONFIG_MMU_NOTIFIER=y # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 # CONFIG_CLEANCACHE is not set # CONFIG_FRONTSWAP is not set # CONFIG_CMA is not set # CONFIG_ZPOOL is not set # CONFIG_ZBUD is not set # CONFIG_ZSMALLOC is not set # CONFIG_IDLE_PAGE_TRACKING is not set # CONFIG_PERCPU_STATS is not set # CONFIG_GUP_BENCHMARK is not set CONFIG_ARCH_HAS_PTE_SPECIAL=y CONFIG_NET=y CONFIG_SKB_EXTENSIONS=y # # Networking options # CONFIG_PACKET=y # CONFIG_PACKET_DIAG is not set CONFIG_UNIX=y # CONFIG_UNIX_DIAG is not set # CONFIG_TLS is not set CONFIG_XFRM=y CONFIG_XFRM_ALGO=y CONFIG_XFRM_USER=y # CONFIG_XFRM_INTERFACE is not set CONFIG_XFRM_SUB_POLICY=y CONFIG_XFRM_MIGRATE=y CONFIG_XFRM_STATISTICS=y CONFIG_XFRM_IPCOMP=y CONFIG_NET_KEY=y CONFIG_NET_KEY_MIGRATE=y CONFIG_INET=y CONFIG_IP_MULTICAST=y CONFIG_IP_ADVANCED_ROUTER=y # CONFIG_IP_FIB_TRIE_STATS is not set CONFIG_IP_MULTIPLE_TABLES=y CONFIG_IP_ROUTE_MULTIPATH=y CONFIG_IP_ROUTE_VERBOSE=y CONFIG_IP_PNP=y CONFIG_IP_PNP_DHCP=y CONFIG_IP_PNP_BOOTP=y CONFIG_IP_PNP_RARP=y CONFIG_NET_IPIP=y # CONFIG_NET_IPGRE_DEMUX is not set CONFIG_NET_IP_TUNNEL=y CONFIG_IP_MROUTE_COMMON=y CONFIG_IP_MROUTE=y # CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set CONFIG_IP_PIMSM_V1=y CONFIG_IP_PIMSM_V2=y # CONFIG_SYN_COOKIES is not set # CONFIG_NET_IPVTI is not set # CONFIG_NET_FOU is not set # CONFIG_NET_FOU_IP_TUNNELS is not set CONFIG_INET_AH=y CONFIG_INET_ESP=y # CONFIG_INET_ESP_OFFLOAD is not set CONFIG_INET_IPCOMP=y CONFIG_INET_XFRM_TUNNEL=y CONFIG_INET_TUNNEL=y CONFIG_INET_XFRM_MODE_TRANSPORT=y CONFIG_INET_XFRM_MODE_TUNNEL=y CONFIG_INET_XFRM_MODE_BEET=y CONFIG_INET_DIAG=y CONFIG_INET_TCP_DIAG=y # CONFIG_INET_UDP_DIAG is not set # CONFIG_INET_RAW_DIAG is not set # CONFIG_INET_DIAG_DESTROY is not set # CONFIG_TCP_CONG_ADVANCED is not set CONFIG_TCP_CONG_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" # CONFIG_TCP_MD5SIG is not set CONFIG_IPV6=y # CONFIG_IPV6_ROUTER_PREF is not set # CONFIG_IPV6_OPTIMISTIC_DAD is not set # CONFIG_INET6_AH is not set # CONFIG_INET6_ESP is not set # CONFIG_INET6_IPCOMP is not set # CONFIG_IPV6_MIP6 is not set CONFIG_INET6_XFRM_MODE_TRANSPORT=y CONFIG_INET6_XFRM_MODE_TUNNEL=y CONFIG_INET6_XFRM_MODE_BEET=y # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set # CONFIG_IPV6_VTI is not set CONFIG_IPV6_SIT=y # CONFIG_IPV6_SIT_6RD is not set CONFIG_IPV6_NDISC_NODETYPE=y # CONFIG_IPV6_TUNNEL is not set # CONFIG_IPV6_MULTIPLE_TABLES is not set # CONFIG_IPV6_MROUTE is not set # CONFIG_IPV6_SEG6_LWTUNNEL is not set # CONFIG_IPV6_SEG6_HMAC is not set # CONFIG_NETWORK_SECMARK is not set CONFIG_NET_PTP_CLASSIFY=y # CONFIG_NETWORK_PHY_TIMESTAMPING is not set # CONFIG_NETFILTER is not set # CONFIG_BPFILTER is not set # CONFIG_IP_DCCP is not set CONFIG_IP_SCTP=m # CONFIG_SCTP_DBG_OBJCNT is not set CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5=y # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1 is not set # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set CONFIG_SCTP_COOKIE_HMAC_MD5=y # CONFIG_SCTP_COOKIE_HMAC_SHA1 is not set CONFIG_INET_SCTP_DIAG=m # CONFIG_RDS is not set # CONFIG_TIPC is not set # CONFIG_ATM is not set # CONFIG_L2TP is not set # CONFIG_BRIDGE is not set CONFIG_HAVE_NET_DSA=y # CONFIG_NET_DSA is not set CONFIG_VLAN_8021Q=y # CONFIG_VLAN_8021Q_GVRP is not set # CONFIG_VLAN_8021Q_MVRP is not set # CONFIG_DECNET is not set # CONFIG_LLC2 is not set # CONFIG_ATALK is not set # CONFIG_X25 is not set # CONFIG_LAPB is not set # CONFIG_PHONET is not set # CONFIG_6LOWPAN is not set # CONFIG_IEEE802154 is not set # CONFIG_NET_SCHED is not set # CONFIG_DCB is not set CONFIG_DNS_RESOLVER=y # CONFIG_BATMAN_ADV is not set # CONFIG_OPENVSWITCH is not set # CONFIG_VSOCKETS is not set # CONFIG_NETLINK_DIAG is not set # CONFIG_MPLS is not set # CONFIG_NET_NSH is not set # CONFIG_HSR is not set # CONFIG_NET_SWITCHDEV is not set # CONFIG_NET_L3_MASTER_DEV is not set # CONFIG_NET_NCSI is not set CONFIG_RPS=y CONFIG_RFS_ACCEL=y CONFIG_XPS=y # CONFIG_CGROUP_NET_PRIO is not set # CONFIG_CGROUP_NET_CLASSID is not set CONFIG_NET_RX_BUSY_POLL=y CONFIG_BQL=y # CONFIG_BPF_JIT is not set CONFIG_NET_FLOW_LIMIT=y # # Network testing # # CONFIG_NET_PKTGEN is not set # CONFIG_NET_DROP_MONITOR is not set # CONFIG_HAMRADIO is not set # CONFIG_CAN is not set # CONFIG_BT is not set # CONFIG_AF_RXRPC is not set # CONFIG_AF_KCM is not set CONFIG_FIB_RULES=y CONFIG_WIRELESS=y # CONFIG_CFG80211 is not set # # CFG80211 needs to be enabled for MAC80211 # CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 # CONFIG_WIMAX is not set # CONFIG_RFKILL is not set # CONFIG_NET_9P is not set # CONFIG_CAIF is not set # CONFIG_CEPH_LIB is not set # CONFIG_NFC is not set # CONFIG_PSAMPLE is not set # CONFIG_NET_IFE is not set # CONFIG_LWTUNNEL is not set CONFIG_DST_CACHE=y CONFIG_GRO_CELLS=y # CONFIG_NET_DEVLINK is not set CONFIG_MAY_USE_DEVLINK=y # CONFIG_FAILOVER is not set CONFIG_HAVE_EBPF_JIT=y # # Device Drivers # CONFIG_HAVE_PCI=y CONFIG_PCI=y CONFIG_PCI_DOMAINS=y CONFIG_PCI_SYSCALL=y CONFIG_PCIEPORTBUS=y CONFIG_PCIEAER=y # CONFIG_PCIEAER_INJECT is not set # CONFIG_PCIE_ECRC is not set CONFIG_PCIEASPM=y # CONFIG_PCIEASPM_DEBUG is not set CONFIG_PCIEASPM_DEFAULT=y # CONFIG_PCIEASPM_POWERSAVE is not set # CONFIG_PCIEASPM_POWER_SUPERSAVE is not set # CONFIG_PCIEASPM_PERFORMANCE is not set # CONFIG_PCIE_DPC is not set # CONFIG_PCIE_PTM is not set CONFIG_PCI_MSI=y CONFIG_PCI_QUIRKS=y # CONFIG_PCI_DEBUG is not set # CONFIG_PCI_STUB is not set # CONFIG_PCI_IOV is not set # CONFIG_PCI_PRI is not set # CONFIG_PCI_PASID is not set # CONFIG_HOTPLUG_PCI is not set # # PCI controller drivers # # # Cadence PCIe controllers support # # CONFIG_PCIE_CADENCE_HOST is not set # CONFIG_PCI_FTPCI100 is not set # CONFIG_PCI_HOST_GENERIC is not set # CONFIG_PCIE_XILINX is not set # # DesignWare PCI Core Support # # # PCI Endpoint # # CONFIG_PCI_ENDPOINT is not set # # PCI switch controller drivers # # CONFIG_PCI_SW_SWITCHTEC is not set # CONFIG_PCCARD is not set CONFIG_HAVE_RAPIDIO=y # CONFIG_RAPIDIO is not set # # Generic Driver Options # CONFIG_UEVENT_HELPER=y CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y CONFIG_STANDALONE=y CONFIG_PREVENT_FIRMWARE_BUILD=y # # Firmware loader # CONFIG_FW_LOADER=y CONFIG_EXTRA_FIRMWARE="" # CONFIG_FW_LOADER_USER_HELPER is not set CONFIG_ALLOW_DEV_COREDUMP=y # CONFIG_DEBUG_DRIVER is not set # CONFIG_DEBUG_DEVRES is not set # CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set # CONFIG_TEST_ASYNC_DRIVER_PROBE is not set CONFIG_GENERIC_CPU_AUTOPROBE=y CONFIG_GENERIC_CPU_VULNERABILITIES=y CONFIG_SOC_BUS=y CONFIG_REGMAP=y CONFIG_REGMAP_I2C=y CONFIG_REGMAP_SPI=y # # Bus devices # # CONFIG_CONNECTOR is not set # CONFIG_GNSS is not set CONFIG_MTD=y # CONFIG_MTD_TESTS is not set CONFIG_MTD_CMDLINE_PARTS=y CONFIG_MTD_OF_PARTS=y # CONFIG_MTD_AR7_PARTS is not set # # Partition parsers # # CONFIG_MTD_REDBOOT_PARTS is not set # # User Modules And Translation Layers # CONFIG_MTD_BLKDEVS=y CONFIG_MTD_BLOCK=y # CONFIG_FTL is not set # CONFIG_NFTL is not set # CONFIG_INFTL is not set # CONFIG_RFD_FTL is not set # CONFIG_SSFDC is not set # CONFIG_SM_FTL is not set # CONFIG_MTD_OOPS is not set # CONFIG_MTD_SWAP is not set # CONFIG_MTD_PARTITIONED_MASTER is not set # # RAM/ROM/Flash chip drivers # CONFIG_MTD_CFI=y # CONFIG_MTD_JEDECPROBE is not set CONFIG_MTD_GEN_PROBE=y # CONFIG_MTD_CFI_ADV_OPTIONS is not set CONFIG_MTD_MAP_BANK_WIDTH_1=y CONFIG_MTD_MAP_BANK_WIDTH_2=y CONFIG_MTD_MAP_BANK_WIDTH_4=y CONFIG_MTD_CFI_I1=y CONFIG_MTD_CFI_I2=y # CONFIG_MTD_CFI_INTELEXT is not set CONFIG_MTD_CFI_AMDSTD=y # CONFIG_MTD_CFI_STAA is not set CONFIG_MTD_CFI_UTIL=y # CONFIG_MTD_RAM is not set # CONFIG_MTD_ROM is not set # CONFIG_MTD_ABSENT is not set # # Mapping drivers for chip access # # CONFIG_MTD_COMPLEX_MAPPINGS is not set # CONFIG_MTD_PHYSMAP is not set # CONFIG_MTD_INTEL_VR_NOR is not set # CONFIG_MTD_PLATRAM is not set # # Self-contained MTD device drivers # # CONFIG_MTD_PMC551 is not set # CONFIG_MTD_DATAFLASH is not set CONFIG_MTD_M25P80=y # CONFIG_MTD_MCHP23K256 is not set # CONFIG_MTD_SST25L is not set # CONFIG_MTD_SLRAM is not set # CONFIG_MTD_PHRAM is not set # CONFIG_MTD_MTDRAM is not set # CONFIG_MTD_BLOCK2MTD is not set # # Disk-On-Chip Device Drivers # # CONFIG_MTD_DOCG3 is not set # CONFIG_MTD_ONENAND is not set CONFIG_MTD_NAND_ECC=y # CONFIG_MTD_NAND_ECC_SMC is not set CONFIG_MTD_NAND=y # CONFIG_MTD_NAND_ECC_BCH is not set # CONFIG_MTD_NAND_DENALI_PCI is not set # CONFIG_MTD_NAND_DENALI_DT is not set # CONFIG_MTD_NAND_GPIO is not set # CONFIG_MTD_NAND_RICOH is not set # CONFIG_MTD_NAND_DISKONCHIP is not set # CONFIG_MTD_NAND_CAFE is not set # CONFIG_MTD_NAND_NANDSIM is not set # CONFIG_MTD_NAND_PLATFORM is not set # CONFIG_MTD_NAND_FSL_ELBC is not set CONFIG_MTD_NAND_FSL_IFC=y # CONFIG_MTD_SPI_NAND is not set # # LPDDR & LPDDR2 PCM memory drivers # # CONFIG_MTD_LPDDR is not set CONFIG_MTD_SPI_NOR=y # CONFIG_MTD_MT81xx_NOR is not set # CONFIG_MTD_SPI_NOR_USE_4K_SECTORS is not set # CONFIG_MTD_UBI is not set CONFIG_DTC=y CONFIG_OF=y # CONFIG_OF_UNITTEST is not set CONFIG_OF_FLATTREE=y CONFIG_OF_EARLY_FLATTREE=y CONFIG_OF_KOBJ=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y CONFIG_OF_NET=y CONFIG_OF_MDIO=y CONFIG_OF_RESERVED_MEM=y # CONFIG_OF_OVERLAY is not set CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # CONFIG_PARPORT is not set CONFIG_BLK_DEV=y # CONFIG_BLK_DEV_NULL_BLK is not set # CONFIG_BLK_DEV_FD is not set CONFIG_CDROM=y # CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set # CONFIG_BLK_DEV_UMEM is not set CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 # CONFIG_BLK_DEV_CRYPTOLOOP is not set # CONFIG_BLK_DEV_DRBD is not set # CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_SKD is not set # CONFIG_BLK_DEV_SX8 is not set CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=262144 # CONFIG_CDROM_PKTCDVD is not set # CONFIG_ATA_OVER_ETH is not set # CONFIG_BLK_DEV_RBD is not set # CONFIG_BLK_DEV_RSXX is not set # # NVME Support # # CONFIG_BLK_DEV_NVME is not set # CONFIG_NVME_FC is not set # # Misc devices # # CONFIG_AD525X_DPOT is not set # CONFIG_DUMMY_IRQ is not set # CONFIG_PHANTOM is not set # CONFIG_SGI_IOC4 is not set # CONFIG_TIFM_CORE is not set # CONFIG_ICS932S401 is not set # CONFIG_ENCLOSURE_SERVICES is not set # CONFIG_HP_ILO is not set # CONFIG_APDS9802ALS is not set # CONFIG_ISL29003 is not set # CONFIG_ISL29020 is not set # CONFIG_SENSORS_TSL2550 is not set # CONFIG_SENSORS_BH1770 is not set # CONFIG_SENSORS_APDS990X is not set # CONFIG_HMC6352 is not set # CONFIG_DS1682 is not set # CONFIG_USB_SWITCH_FSA9480 is not set # CONFIG_LATTICE_ECP3_CONFIG is not set # CONFIG_SRAM is not set # CONFIG_PCI_ENDPOINT_TEST is not set # CONFIG_PVPANIC is not set # CONFIG_C2PORT is not set # # EEPROM support # # CONFIG_EEPROM_AT24 is not set # CONFIG_EEPROM_AT25 is not set # CONFIG_EEPROM_LEGACY is not set # CONFIG_EEPROM_MAX6875 is not set # CONFIG_EEPROM_93CX6 is not set # CONFIG_EEPROM_93XX46 is not set # CONFIG_EEPROM_IDT_89HPESX is not set # CONFIG_EEPROM_EE1004 is not set # CONFIG_CB710_CORE is not set # # Texas Instruments shared transport line discipline # # CONFIG_TI_ST is not set # CONFIG_SENSORS_LIS3_SPI is not set # CONFIG_SENSORS_LIS3_I2C is not set # CONFIG_ALTERA_STAPL is not set # # Intel MIC & related support # # # Intel MIC Bus Driver # # # SCIF Bus Driver # # # VOP Bus Driver # # # Intel MIC Host Driver # # # Intel MIC Card Driver # # # SCIF Driver # # # Intel MIC Coprocessor State Management (COSM) Drivers # # # VOP Driver # # CONFIG_GENWQE is not set # CONFIG_ECHO is not set # CONFIG_MISC_ALCOR_PCI is not set # CONFIG_MISC_RTSX_PCI is not set # CONFIG_MISC_RTSX_USB is not set CONFIG_HAVE_IDE=y # CONFIG_IDE is not set # # SCSI device support # CONFIG_SCSI_MOD=y # CONFIG_RAID_ATTRS is not set CONFIG_SCSI=y CONFIG_SCSI_DMA=y CONFIG_SCSI_PROC_FS=y # # SCSI support type (disk, tape, CD-ROM) # CONFIG_BLK_DEV_SD=y CONFIG_CHR_DEV_ST=y # CONFIG_CHR_DEV_OSST is not set CONFIG_BLK_DEV_SR=y # CONFIG_BLK_DEV_SR_VENDOR is not set CONFIG_CHR_DEV_SG=y # CONFIG_CHR_DEV_SCH is not set # CONFIG_SCSI_CONSTANTS is not set CONFIG_SCSI_LOGGING=y # CONFIG_SCSI_SCAN_ASYNC is not set # # SCSI Transports # CONFIG_SCSI_SPI_ATTRS=y # CONFIG_SCSI_FC_ATTRS is not set # CONFIG_SCSI_ISCSI_ATTRS is not set # CONFIG_SCSI_SAS_ATTRS is not set # CONFIG_SCSI_SAS_LIBSAS is not set # CONFIG_SCSI_SRP_ATTRS is not set CONFIG_SCSI_LOWLEVEL=y # CONFIG_ISCSI_TCP is not set # CONFIG_ISCSI_BOOT_SYSFS is not set # CONFIG_SCSI_CXGB3_ISCSI is not set # CONFIG_SCSI_CXGB4_ISCSI is not set # CONFIG_SCSI_BNX2_ISCSI is not set # CONFIG_BE2ISCSI is not set # CONFIG_BLK_DEV_3W_XXXX_RAID is not set # CONFIG_SCSI_HPSA is not set # CONFIG_SCSI_3W_9XXX is not set # CONFIG_SCSI_3W_SAS is not set # CONFIG_SCSI_ACARD is not set # CONFIG_SCSI_AACRAID is not set # CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC79XX is not set # CONFIG_SCSI_AIC94XX is not set # CONFIG_SCSI_MVSAS is not set # CONFIG_SCSI_MVUMI is not set # CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_ARCMSR is not set # CONFIG_SCSI_ESAS2R is not set # CONFIG_MEGARAID_NEWGEN is not set # CONFIG_MEGARAID_LEGACY is not set # CONFIG_MEGARAID_SAS is not set # CONFIG_SCSI_MPT3SAS is not set # CONFIG_SCSI_MPT2SAS is not set # CONFIG_SCSI_SMARTPQI is not set # CONFIG_SCSI_UFSHCD is not set # CONFIG_SCSI_HPTIOP is not set # CONFIG_SCSI_MYRB is not set # CONFIG_SCSI_SNIC is not set # CONFIG_SCSI_DMX3191D is not set # CONFIG_SCSI_GDTH is not set # CONFIG_SCSI_IPS is not set # CONFIG_SCSI_INITIO is not set # CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_STEX is not set # CONFIG_SCSI_SYM53C8XX_2 is not set # CONFIG_SCSI_IPR is not set # CONFIG_SCSI_QLOGIC_1280 is not set # CONFIG_SCSI_QLA_ISCSI is not set # CONFIG_SCSI_DC395x is not set # CONFIG_SCSI_AM53C974 is not set # CONFIG_SCSI_WD719X is not set # CONFIG_SCSI_DEBUG is not set # CONFIG_SCSI_PMCRAID is not set # CONFIG_SCSI_PM8001 is not set # CONFIG_SCSI_DH is not set # CONFIG_SCSI_OSD_INITIATOR is not set CONFIG_ATA=y CONFIG_ATA_VERBOSE_ERROR=y CONFIG_SATA_PMP=y # # Controllers with non-SFF native interface # # CONFIG_SATA_AHCI is not set # CONFIG_SATA_AHCI_PLATFORM is not set # CONFIG_AHCI_CEVA is not set # CONFIG_AHCI_QORIQ is not set CONFIG_SATA_FSL=y # CONFIG_SATA_INIC162X is not set # CONFIG_SATA_ACARD_AHCI is not set CONFIG_SATA_SIL24=y CONFIG_ATA_SFF=y # # SFF controllers with custom DMA interface # # CONFIG_PDC_ADMA is not set # CONFIG_SATA_QSTOR is not set # CONFIG_SATA_SX4 is not set CONFIG_ATA_BMDMA=y # # SATA SFF controllers with BMDMA # # CONFIG_ATA_PIIX is not set # CONFIG_SATA_DWC is not set # CONFIG_SATA_MV is not set # CONFIG_SATA_NV is not set # CONFIG_SATA_PROMISE is not set # CONFIG_SATA_SIL is not set # CONFIG_SATA_SIS is not set # CONFIG_SATA_SVW is not set # CONFIG_SATA_ULI is not set # CONFIG_SATA_VIA is not set # CONFIG_SATA_VITESSE is not set # # PATA SFF controllers with BMDMA # # CONFIG_PATA_ALI is not set # CONFIG_PATA_AMD is not set # CONFIG_PATA_ARTOP is not set # CONFIG_PATA_ATIIXP is not set # CONFIG_PATA_ATP867X is not set # CONFIG_PATA_CMD64X is not set # CONFIG_PATA_CYPRESS is not set # CONFIG_PATA_EFAR is not set # CONFIG_PATA_HPT366 is not set # CONFIG_PATA_HPT37X is not set # CONFIG_PATA_HPT3X2N is not set # CONFIG_PATA_HPT3X3 is not set # CONFIG_PATA_IT8213 is not set # CONFIG_PATA_IT821X is not set # CONFIG_PATA_JMICRON is not set # CONFIG_PATA_MARVELL is not set # CONFIG_PATA_NETCELL is not set # CONFIG_PATA_NINJA32 is not set # CONFIG_PATA_NS87415 is not set # CONFIG_PATA_OLDPIIX is not set # CONFIG_PATA_OPTIDMA is not set # CONFIG_PATA_PDC2027X is not set # CONFIG_PATA_PDC_OLD is not set # CONFIG_PATA_RADISYS is not set # CONFIG_PATA_RDC is not set # CONFIG_PATA_SCH is not set # CONFIG_PATA_SERVERWORKS is not set # CONFIG_PATA_SIL680 is not set # CONFIG_PATA_SIS is not set # CONFIG_PATA_TOSHIBA is not set # CONFIG_PATA_TRIFLEX is not set # CONFIG_PATA_VIA is not set # CONFIG_PATA_WINBOND is not set # # PIO-only SFF controllers # # CONFIG_PATA_CMD640_PCI is not set # CONFIG_PATA_MPIIX is not set # CONFIG_PATA_NS87410 is not set # CONFIG_PATA_OPTI is not set # CONFIG_PATA_PLATFORM is not set # CONFIG_PATA_RZ1000 is not set # # Generic fallback / legacy drivers # # CONFIG_ATA_GENERIC is not set # CONFIG_PATA_LEGACY is not set CONFIG_MD=y CONFIG_BLK_DEV_MD=y # CONFIG_MD_AUTODETECT is not set # CONFIG_MD_LINEAR is not set # CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID10 is not set # CONFIG_MD_RAID456 is not set # CONFIG_MD_MULTIPATH is not set # CONFIG_MD_FAULTY is not set # CONFIG_BCACHE is not set # CONFIG_BLK_DEV_DM is not set # CONFIG_TARGET_CORE is not set # CONFIG_FUSION is not set # # IEEE 1394 (FireWire) support # # CONFIG_FIREWIRE is not set # CONFIG_FIREWIRE_NOSY is not set # CONFIG_MACINTOSH_DRIVERS is not set CONFIG_NETDEVICES=y CONFIG_NET_CORE=y # CONFIG_BONDING is not set # CONFIG_DUMMY is not set # CONFIG_EQUALIZER is not set # CONFIG_NET_FC is not set # CONFIG_NET_TEAM is not set # CONFIG_MACVLAN is not set # CONFIG_VXLAN is not set # CONFIG_MACSEC is not set # CONFIG_NETCONSOLE is not set # CONFIG_TUN is not set # CONFIG_TUN_VNET_CROSS_LE is not set # CONFIG_VETH is not set # CONFIG_NLMON is not set # CONFIG_ARCNET is not set # # CAIF transport drivers # # # Distributed Switch Architecture drivers # CONFIG_ETHERNET=y CONFIG_NET_VENDOR_3COM=y # CONFIG_VORTEX is not set # CONFIG_TYPHOON is not set CONFIG_NET_VENDOR_ADAPTEC=y # CONFIG_ADAPTEC_STARFIRE is not set CONFIG_NET_VENDOR_AGERE=y # CONFIG_ET131X is not set CONFIG_NET_VENDOR_ALACRITECH=y # CONFIG_SLICOSS is not set CONFIG_NET_VENDOR_ALTEON=y # CONFIG_ACENIC is not set # CONFIG_ALTERA_TSE is not set CONFIG_NET_VENDOR_AMAZON=y CONFIG_NET_VENDOR_AMD=y # CONFIG_AMD8111_ETH is not set # CONFIG_PCNET32 is not set CONFIG_NET_VENDOR_AQUANTIA=y CONFIG_NET_VENDOR_ARC=y CONFIG_NET_VENDOR_ATHEROS=y # CONFIG_ATL2 is not set # CONFIG_ATL1 is not set # CONFIG_ATL1E is not set # CONFIG_ATL1C is not set # CONFIG_ALX is not set CONFIG_NET_VENDOR_AURORA=y # CONFIG_AURORA_NB8800 is not set CONFIG_NET_VENDOR_BROADCOM=y # CONFIG_B44 is not set # CONFIG_BCMGENET is not set # CONFIG_BNX2 is not set # CONFIG_CNIC is not set # CONFIG_TIGON3 is not set # CONFIG_BNX2X is not set # CONFIG_SYSTEMPORT is not set # CONFIG_BNXT is not set CONFIG_NET_VENDOR_BROCADE=y # CONFIG_BNA is not set CONFIG_NET_VENDOR_CADENCE=y # CONFIG_MACB is not set CONFIG_NET_VENDOR_CAVIUM=y # CONFIG_THUNDER_NIC_PF is not set # CONFIG_THUNDER_NIC_VF is not set # CONFIG_THUNDER_NIC_BGX is not set # CONFIG_THUNDER_NIC_RGX is not set CONFIG_CAVIUM_PTP=y # CONFIG_LIQUIDIO is not set # CONFIG_LIQUIDIO_VF is not set CONFIG_NET_VENDOR_CHELSIO=y # CONFIG_CHELSIO_T1 is not set # CONFIG_CHELSIO_T3 is not set # CONFIG_CHELSIO_T4 is not set # CONFIG_CHELSIO_T4VF is not set CONFIG_NET_VENDOR_CISCO=y # CONFIG_ENIC is not set CONFIG_NET_VENDOR_CORTINA=y # CONFIG_GEMINI_ETHERNET is not set # CONFIG_DNET is not set CONFIG_NET_VENDOR_DEC=y # CONFIG_NET_TULIP is not set CONFIG_NET_VENDOR_DLINK=y # CONFIG_DL2K is not set # CONFIG_SUNDANCE is not set CONFIG_NET_VENDOR_EMULEX=y # CONFIG_BE2NET is not set CONFIG_NET_VENDOR_EZCHIP=y # CONFIG_EZCHIP_NPS_MANAGEMENT_ENET is not set CONFIG_NET_VENDOR_FREESCALE=y # CONFIG_FSL_FMAN is not set # CONFIG_FSL_PQ_MDIO is not set CONFIG_FSL_XGMAC_MDIO=y # CONFIG_GIANFAR is not set CONFIG_NET_VENDOR_HP=y # CONFIG_HP100 is not set CONFIG_NET_VENDOR_HUAWEI=y CONFIG_NET_VENDOR_I825XX=y CONFIG_NET_VENDOR_INTEL=y # CONFIG_E100 is not set # CONFIG_E1000 is not set CONFIG_E1000E=y # CONFIG_IGB is not set # CONFIG_IGBVF is not set # CONFIG_IXGB is not set # CONFIG_IXGBE is not set # CONFIG_IXGBEVF is not set # CONFIG_I40E is not set # CONFIG_I40EVF is not set # CONFIG_ICE is not set # CONFIG_FM10K is not set # CONFIG_IGC is not set # CONFIG_JME is not set CONFIG_NET_VENDOR_MARVELL=y # CONFIG_MVMDIO is not set # CONFIG_SKGE is not set # CONFIG_SKY2 is not set CONFIG_NET_VENDOR_MELLANOX=y # CONFIG_MLX4_EN is not set # CONFIG_MLX5_CORE is not set # CONFIG_MLXSW_CORE is not set # CONFIG_MLXFW is not set CONFIG_NET_VENDOR_MICREL=y # CONFIG_KS8842 is not set # CONFIG_KS8851 is not set # CONFIG_KS8851_MLL is not set # CONFIG_KSZ884X_PCI is not set CONFIG_NET_VENDOR_MICROCHIP=y # CONFIG_ENC28J60 is not set # CONFIG_ENCX24J600 is not set # CONFIG_LAN743X is not set CONFIG_NET_VENDOR_MICROSEMI=y CONFIG_NET_VENDOR_MYRI=y # CONFIG_MYRI10GE is not set # CONFIG_FEALNX is not set CONFIG_NET_VENDOR_NATSEMI=y # CONFIG_NATSEMI is not set # CONFIG_NS83820 is not set CONFIG_NET_VENDOR_NETERION=y # CONFIG_S2IO is not set # CONFIG_VXGE is not set CONFIG_NET_VENDOR_NETRONOME=y # CONFIG_NFP is not set CONFIG_NET_VENDOR_NI=y # CONFIG_NI_XGE_MANAGEMENT_ENET is not set CONFIG_NET_VENDOR_8390=y # CONFIG_NE2K_PCI is not set CONFIG_NET_VENDOR_NVIDIA=y # CONFIG_FORCEDETH is not set CONFIG_NET_VENDOR_OKI=y # CONFIG_ETHOC is not set CONFIG_NET_VENDOR_PACKET_ENGINES=y # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set CONFIG_NET_VENDOR_QLOGIC=y # CONFIG_QLA3XXX is not set # CONFIG_QLCNIC is not set # CONFIG_QLGE is not set # CONFIG_NETXEN_NIC is not set # CONFIG_QED is not set CONFIG_NET_VENDOR_QUALCOMM=y # CONFIG_QCA7000_SPI is not set # CONFIG_QCOM_EMAC is not set # CONFIG_RMNET is not set CONFIG_NET_VENDOR_RDC=y # CONFIG_R6040 is not set CONFIG_NET_VENDOR_REALTEK=y # CONFIG_8139CP is not set # CONFIG_8139TOO is not set # CONFIG_R8169 is not set CONFIG_NET_VENDOR_RENESAS=y CONFIG_NET_VENDOR_ROCKER=y CONFIG_NET_VENDOR_SAMSUNG=y # CONFIG_SXGBE_ETH is not set CONFIG_NET_VENDOR_SEEQ=y CONFIG_NET_VENDOR_SOLARFLARE=y # CONFIG_SFC is not set # CONFIG_SFC_FALCON is not set CONFIG_NET_VENDOR_SILAN=y # CONFIG_SC92031 is not set CONFIG_NET_VENDOR_SIS=y # CONFIG_SIS900 is not set # CONFIG_SIS190 is not set CONFIG_NET_VENDOR_SMSC=y # CONFIG_EPIC100 is not set # CONFIG_SMSC911X is not set # CONFIG_SMSC9420 is not set CONFIG_NET_VENDOR_SOCIONEXT=y CONFIG_NET_VENDOR_STMICRO=y # CONFIG_STMMAC_ETH is not set CONFIG_NET_VENDOR_SUN=y # CONFIG_HAPPYMEAL is not set # CONFIG_SUNGEM is not set # CONFIG_CASSINI is not set # CONFIG_NIU is not set CONFIG_NET_VENDOR_SYNOPSYS=y # CONFIG_DWC_XLGMAC is not set CONFIG_NET_VENDOR_TEHUTI=y # CONFIG_TEHUTI is not set CONFIG_NET_VENDOR_TI=y # CONFIG_TI_CPSW_ALE is not set # CONFIG_TLAN is not set CONFIG_NET_VENDOR_VIA=y # CONFIG_VIA_RHINE is not set # CONFIG_VIA_VELOCITY is not set CONFIG_NET_VENDOR_WIZNET=y # CONFIG_WIZNET_W5100 is not set # CONFIG_WIZNET_W5300 is not set CONFIG_NET_VENDOR_XILINX=y # CONFIG_FDDI is not set # CONFIG_HIPPI is not set CONFIG_MDIO_DEVICE=y CONFIG_MDIO_BUS=y # CONFIG_MDIO_BCM_UNIMAC is not set # CONFIG_MDIO_BITBANG is not set CONFIG_MDIO_BUS_MUX=y # CONFIG_MDIO_BUS_MUX_GPIO is not set CONFIG_MDIO_BUS_MUX_MMIOREG=y # CONFIG_MDIO_HISI_FEMAC is not set # CONFIG_MDIO_MSCC_MIIM is not set # CONFIG_MDIO_OCTEON is not set # CONFIG_MDIO_THUNDER is not set CONFIG_PHYLIB=y CONFIG_SWPHY=y # # MII PHY device drivers # # CONFIG_AMD_PHY is not set CONFIG_AQUANTIA_PHY=y # CONFIG_ASIX_PHY is not set # CONFIG_AT803X_PHY is not set # CONFIG_BCM7XXX_PHY is not set # CONFIG_BCM87XX_PHY is not set # CONFIG_BROADCOM_PHY is not set # CONFIG_CICADA_PHY is not set # CONFIG_CORTINA_PHY is not set # CONFIG_DAVICOM_PHY is not set # CONFIG_DP83822_PHY is not set # CONFIG_DP83TC811_PHY is not set # CONFIG_DP83848_PHY is not set # CONFIG_DP83867_PHY is not set CONFIG_FIXED_PHY=y # CONFIG_ICPLUS_PHY is not set # CONFIG_INTEL_XWAY_PHY is not set # CONFIG_LSI_ET1011C_PHY is not set # CONFIG_LXT_PHY is not set # CONFIG_MARVELL_PHY is not set # CONFIG_MARVELL_10G_PHY is not set # CONFIG_MICREL_PHY is not set # CONFIG_MICROCHIP_PHY is not set # CONFIG_MICROCHIP_T1_PHY is not set # CONFIG_MICROSEMI_PHY is not set # CONFIG_NATIONAL_PHY is not set # CONFIG_QSEMI_PHY is not set # CONFIG_REALTEK_PHY is not set # CONFIG_RENESAS_PHY is not set # CONFIG_ROCKCHIP_PHY is not set # CONFIG_SMSC_PHY is not set # CONFIG_STE10XP is not set CONFIG_TERANETICS_PHY=y CONFIG_VITESSE_PHY=y # CONFIG_XILINX_GMII2RGMII is not set # CONFIG_MICREL_KS8995MA is not set # CONFIG_PPP is not set # CONFIG_SLIP is not set CONFIG_USB_NET_DRIVERS=y # CONFIG_USB_CATC is not set # CONFIG_USB_KAWETH is not set # CONFIG_USB_PEGASUS is not set # CONFIG_USB_RTL8150 is not set # CONFIG_USB_RTL8152 is not set # CONFIG_USB_LAN78XX is not set # CONFIG_USB_USBNET is not set # CONFIG_USB_IPHETH is not set CONFIG_WLAN=y # CONFIG_WIRELESS_WDS is not set CONFIG_WLAN_VENDOR_ADMTEK=y CONFIG_WLAN_VENDOR_ATH=y # CONFIG_ATH_DEBUG is not set # CONFIG_ATH5K_PCI is not set CONFIG_WLAN_VENDOR_ATMEL=y CONFIG_WLAN_VENDOR_BROADCOM=y CONFIG_WLAN_VENDOR_CISCO=y CONFIG_WLAN_VENDOR_INTEL=y # CONFIG_IWLWIFI is not set CONFIG_WLAN_VENDOR_INTERSIL=y # CONFIG_HOSTAP is not set # CONFIG_PRISM54 is not set CONFIG_WLAN_VENDOR_MARVELL=y CONFIG_WLAN_VENDOR_MEDIATEK=y CONFIG_WLAN_VENDOR_RALINK=y CONFIG_WLAN_VENDOR_REALTEK=y CONFIG_WLAN_VENDOR_RSI=y CONFIG_WLAN_VENDOR_ST=y CONFIG_WLAN_VENDOR_TI=y CONFIG_WLAN_VENDOR_ZYDAS=y CONFIG_WLAN_VENDOR_QUANTENNA=y # # Enable WiMAX (Networking options) to see the WiMAX drivers # # CONFIG_WAN is not set # CONFIG_VMXNET3 is not set # CONFIG_NETDEVSIM is not set # CONFIG_NET_FAILOVER is not set # CONFIG_ISDN is not set # CONFIG_NVM is not set # # Input device support # CONFIG_INPUT=y # CONFIG_INPUT_FF_MEMLESS is not set # CONFIG_INPUT_POLLDEV is not set # CONFIG_INPUT_SPARSEKMAP is not set # CONFIG_INPUT_MATRIXKMAP is not set # # Userland interfaces # # CONFIG_INPUT_MOUSEDEV is not set # CONFIG_INPUT_JOYDEV is not set # CONFIG_INPUT_EVDEV is not set # CONFIG_INPUT_EVBUG is not set # # Input Device Drivers # # CONFIG_INPUT_KEYBOARD is not set # CONFIG_INPUT_MOUSE is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TABLET is not set # CONFIG_INPUT_TOUCHSCREEN is not set # CONFIG_INPUT_MISC is not set # CONFIG_RMI4_CORE is not set # # Hardware I/O ports # CONFIG_SERIO=y CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y CONFIG_SERIO_I8042=y CONFIG_SERIO_SERPORT=y # CONFIG_SERIO_PCIPS2 is not set CONFIG_SERIO_LIBPS2=y # CONFIG_SERIO_RAW is not set # CONFIG_SERIO_XILINX_XPS_PS2 is not set # CONFIG_SERIO_ALTERA_PS2 is not set # CONFIG_SERIO_PS2MULT is not set # CONFIG_SERIO_ARC_PS2 is not set # CONFIG_SERIO_APBPS2 is not set # CONFIG_SERIO_OLPC_APSP is not set # CONFIG_SERIO_GPIO_PS2 is not set # CONFIG_USERIO is not set # CONFIG_GAMEPORT is not set # # Character devices # CONFIG_TTY=y CONFIG_VT=y CONFIG_CONSOLE_TRANSLATIONS=y CONFIG_VT_CONSOLE=y CONFIG_HW_CONSOLE=y # CONFIG_VT_HW_CONSOLE_BINDING is not set CONFIG_UNIX98_PTYS=y # CONFIG_LEGACY_PTYS is not set # CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_NOZOMI is not set # CONFIG_N_GSM is not set # CONFIG_TRACE_SINK is not set CONFIG_PPC_EPAPR_HV_BYTECHAN=y # CONFIG_PPC_EARLY_DEBUG_EHV_BC is not set CONFIG_DEVMEM=y CONFIG_DEVKMEM=y # # Serial drivers # CONFIG_SERIAL_EARLYCON=y CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y # CONFIG_SERIAL_8250_FINTEK is not set CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_DMA=y CONFIG_SERIAL_8250_PCI=y CONFIG_SERIAL_8250_EXAR=y CONFIG_SERIAL_8250_NR_UARTS=4 CONFIG_SERIAL_8250_RUNTIME_UARTS=4 CONFIG_SERIAL_8250_EXTENDED=y CONFIG_SERIAL_8250_MANY_PORTS=y # CONFIG_SERIAL_8250_ASPEED_VUART is not set CONFIG_SERIAL_8250_SHARE_IRQ=y CONFIG_SERIAL_8250_DETECT_IRQ=y CONFIG_SERIAL_8250_RSA=y CONFIG_SERIAL_8250_FSL=y # CONFIG_SERIAL_8250_DW is not set # CONFIG_SERIAL_8250_RT288X is not set # CONFIG_SERIAL_8250_MOXA is not set # CONFIG_SERIAL_OF_PLATFORM is not set # # Non-8250 serial port support # # CONFIG_SERIAL_MAX3100 is not set # CONFIG_SERIAL_MAX310X is not set # CONFIG_SERIAL_UARTLITE is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_SERIAL_JSM is not set # CONFIG_SERIAL_SCCNXP is not set # CONFIG_SERIAL_SC16IS7XX is not set # CONFIG_SERIAL_ALTERA_JTAGUART is not set # CONFIG_SERIAL_ALTERA_UART is not set # CONFIG_SERIAL_IFX6X60 is not set # CONFIG_SERIAL_XILINX_PS_UART is not set # CONFIG_SERIAL_ARC is not set # CONFIG_SERIAL_RP2 is not set # CONFIG_SERIAL_FSL_LPUART is not set # CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set # CONFIG_SERIAL_DEV_BUS is not set # CONFIG_TTY_PRINTK is not set # CONFIG_HVC_UDBG is not set # CONFIG_IPMI_HANDLER is not set CONFIG_HW_RANDOM=y # CONFIG_HW_RANDOM_TIMERIOMEM is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set # CONFIG_RAW_DRIVER is not set # CONFIG_HANGCHECK_TIMER is not set # CONFIG_TCG_TPM is not set CONFIG_DEVPORT=y # CONFIG_XILLYBUS is not set # CONFIG_RANDOM_TRUST_CPU is not set # # I2C support # CONFIG_I2C=y CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y CONFIG_I2C_CHARDEV=y CONFIG_I2C_MUX=y # # Multiplexer I2C Chip support # # CONFIG_I2C_ARB_GPIO_CHALLENGE is not set # CONFIG_I2C_MUX_GPIO is not set # CONFIG_I2C_MUX_GPMUX is not set # CONFIG_I2C_MUX_LTC4306 is not set # CONFIG_I2C_MUX_PCA9541 is not set CONFIG_I2C_MUX_PCA954x=y # CONFIG_I2C_MUX_REG is not set # CONFIG_I2C_MUX_MLXCPLD is not set CONFIG_I2C_HELPER_AUTO=y # # I2C Hardware Bus support # # # PC SMBus host controller drivers # # CONFIG_I2C_ALI1535 is not set # CONFIG_I2C_ALI1563 is not set # CONFIG_I2C_ALI15X3 is not set # CONFIG_I2C_AMD756 is not set # CONFIG_I2C_AMD8111 is not set # CONFIG_I2C_I801 is not set # CONFIG_I2C_ISCH is not set # CONFIG_I2C_PIIX4 is not set # CONFIG_I2C_NFORCE2 is not set # CONFIG_I2C_NVIDIA_GPU is not set # CONFIG_I2C_SIS5595 is not set # CONFIG_I2C_SIS630 is not set # CONFIG_I2C_SIS96X is not set # CONFIG_I2C_VIA is not set # CONFIG_I2C_VIAPRO is not set # # I2C system bus drivers (mostly embedded / system-on-chip) # # CONFIG_I2C_CBUS_GPIO is not set # CONFIG_I2C_DESIGNWARE_PLATFORM is not set # CONFIG_I2C_DESIGNWARE_PCI is not set # CONFIG_I2C_EMEV2 is not set # CONFIG_I2C_GPIO is not set CONFIG_I2C_MPC=y # CONFIG_I2C_OCORES is not set # CONFIG_I2C_PCA_PLATFORM is not set # CONFIG_I2C_RK3X is not set # CONFIG_I2C_SIMTEC is not set # CONFIG_I2C_XILINX is not set # # External I2C/SMBus adapter drivers # # CONFIG_I2C_DIOLAN_U2C is not set # CONFIG_I2C_PARPORT_LIGHT is not set # CONFIG_I2C_ROBOTFUZZ_OSIF is not set # CONFIG_I2C_TAOS_EVM is not set # CONFIG_I2C_TINY_USB is not set # # Other I2C/SMBus bus drivers # # CONFIG_I2C_STUB is not set # CONFIG_I2C_SLAVE is not set # CONFIG_I2C_DEBUG_CORE is not set # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set # CONFIG_I3C is not set CONFIG_SPI=y # CONFIG_SPI_DEBUG is not set CONFIG_SPI_MASTER=y CONFIG_SPI_MEM=y # # SPI Master Controller Drivers # # CONFIG_SPI_ALTERA is not set # CONFIG_SPI_AXI_SPI_ENGINE is not set CONFIG_SPI_BITBANG=y # CONFIG_SPI_CADENCE is not set # CONFIG_SPI_DESIGNWARE is not set CONFIG_SPI_GPIO=y CONFIG_SPI_FSL_LIB=y CONFIG_SPI_FSL_CPM=y CONFIG_SPI_FSL_SPI=y CONFIG_SPI_FSL_ESPI=y # CONFIG_SPI_OC_TINY is not set # CONFIG_SPI_PXA2XX is not set # CONFIG_SPI_ROCKCHIP is not set # CONFIG_SPI_SC18IS602 is not set # CONFIG_SPI_MXIC is not set # CONFIG_SPI_XCOMM is not set # CONFIG_SPI_XILINX is not set # CONFIG_SPI_ZYNQMP_GQSPI is not set # # SPI Protocol Masters # # CONFIG_SPI_SPIDEV is not set # CONFIG_SPI_LOOPBACK_TEST is not set # CONFIG_SPI_TLE62X0 is not set # CONFIG_SPI_SLAVE is not set # CONFIG_SPMI is not set # CONFIG_HSI is not set CONFIG_PPS=y # CONFIG_PPS_DEBUG is not set # # PPS clients support # # CONFIG_PPS_CLIENT_KTIMER is not set # CONFIG_PPS_CLIENT_LDISC is not set # CONFIG_PPS_CLIENT_GPIO is not set # # PPS generators support # # # PTP clock support # CONFIG_PTP_1588_CLOCK=y # # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. # # CONFIG_PINCTRL is not set CONFIG_GPIOLIB=y CONFIG_GPIOLIB_FASTPATH_LIMIT=512 CONFIG_OF_GPIO=y # CONFIG_DEBUG_GPIO is not set CONFIG_GPIO_SYSFS=y CONFIG_GPIO_GENERIC=y # # Memory mapped GPIO drivers # # CONFIG_GPIO_74XX_MMIO is not set # CONFIG_GPIO_ALTERA is not set # CONFIG_GPIO_CADENCE is not set # CONFIG_GPIO_DWAPB is not set # CONFIG_GPIO_EXAR is not set # CONFIG_GPIO_FTGPIO010 is not set # CONFIG_GPIO_GENERIC_PLATFORM is not set # CONFIG_GPIO_GRGPIO is not set # CONFIG_GPIO_HLWD is not set # CONFIG_GPIO_MB86S7X is not set # CONFIG_GPIO_MOCKUP is not set CONFIG_GPIO_MPC8XXX=y # CONFIG_GPIO_XILINX is not set # # I2C GPIO expanders # # CONFIG_GPIO_ADP5588 is not set # CONFIG_GPIO_ADNP is not set # CONFIG_GPIO_MAX7300 is not set # CONFIG_GPIO_MAX732X is not set # CONFIG_GPIO_PCA953X is not set # CONFIG_GPIO_PCF857X is not set # CONFIG_GPIO_TPIC2810 is not set # # MFD GPIO expanders # # # PCI GPIO expanders # # CONFIG_GPIO_BT8XX is not set # CONFIG_GPIO_PCI_IDIO_16 is not set # CONFIG_GPIO_PCIE_IDIO_24 is not set # CONFIG_GPIO_RDC321X is not set # # SPI GPIO expanders # # CONFIG_GPIO_74X164 is not set # CONFIG_GPIO_MAX3191X is not set # CONFIG_GPIO_MAX7301 is not set # CONFIG_GPIO_MC33880 is not set # CONFIG_GPIO_PISOSR is not set # CONFIG_GPIO_XRA1403 is not set # # USB GPIO expanders # # CONFIG_W1 is not set # CONFIG_POWER_AVS is not set # CONFIG_POWER_RESET is not set # CONFIG_POWER_SUPPLY is not set CONFIG_HWMON=y CONFIG_HWMON_VID=y # CONFIG_HWMON_DEBUG_CHIP is not set # # Native drivers # # CONFIG_SENSORS_AD7314 is not set # CONFIG_SENSORS_AD7414 is not set # CONFIG_SENSORS_AD7418 is not set # CONFIG_SENSORS_ADM1021 is not set # CONFIG_SENSORS_ADM1025 is not set # CONFIG_SENSORS_ADM1026 is not set # CONFIG_SENSORS_ADM1029 is not set # CONFIG_SENSORS_ADM1031 is not set # CONFIG_SENSORS_ADM9240 is not set # CONFIG_SENSORS_ADT7310 is not set # CONFIG_SENSORS_ADT7410 is not set # CONFIG_SENSORS_ADT7411 is not set # CONFIG_SENSORS_ADT7462 is not set # CONFIG_SENSORS_ADT7470 is not set # CONFIG_SENSORS_ADT7475 is not set # CONFIG_SENSORS_ASC7621 is not set # CONFIG_SENSORS_ASPEED is not set # CONFIG_SENSORS_ATXP1 is not set # CONFIG_SENSORS_DS620 is not set # CONFIG_SENSORS_DS1621 is not set # CONFIG_SENSORS_I5K_AMB is not set # CONFIG_SENSORS_F75375S is not set # CONFIG_SENSORS_GL518SM is not set # CONFIG_SENSORS_GL520SM is not set # CONFIG_SENSORS_G760A is not set # CONFIG_SENSORS_G762 is not set # CONFIG_SENSORS_GPIO_FAN is not set # CONFIG_SENSORS_HIH6130 is not set # CONFIG_SENSORS_JC42 is not set # CONFIG_SENSORS_POWR1220 is not set # CONFIG_SENSORS_LINEAGE is not set # CONFIG_SENSORS_LTC2945 is not set # CONFIG_SENSORS_LTC2990 is not set # CONFIG_SENSORS_LTC4151 is not set # CONFIG_SENSORS_LTC4215 is not set # CONFIG_SENSORS_LTC4222 is not set # CONFIG_SENSORS_LTC4245 is not set # CONFIG_SENSORS_LTC4260 is not set # CONFIG_SENSORS_LTC4261 is not set # CONFIG_SENSORS_MAX1111 is not set # CONFIG_SENSORS_MAX16065 is not set # CONFIG_SENSORS_MAX1619 is not set # CONFIG_SENSORS_MAX1668 is not set # CONFIG_SENSORS_MAX197 is not set # CONFIG_SENSORS_MAX31722 is not set # CONFIG_SENSORS_MAX6621 is not set # CONFIG_SENSORS_MAX6639 is not set # CONFIG_SENSORS_MAX6642 is not set # CONFIG_SENSORS_MAX6650 is not set # CONFIG_SENSORS_MAX6697 is not set # CONFIG_SENSORS_MAX31790 is not set # CONFIG_SENSORS_MCP3021 is not set # CONFIG_SENSORS_TC654 is not set # CONFIG_SENSORS_ADCXX is not set # CONFIG_SENSORS_LM63 is not set # CONFIG_SENSORS_LM70 is not set # CONFIG_SENSORS_LM73 is not set # CONFIG_SENSORS_LM75 is not set # CONFIG_SENSORS_LM77 is not set # CONFIG_SENSORS_LM78 is not set # CONFIG_SENSORS_LM80 is not set # CONFIG_SENSORS_LM83 is not set # CONFIG_SENSORS_LM85 is not set # CONFIG_SENSORS_LM87 is not set CONFIG_SENSORS_LM90=y # CONFIG_SENSORS_LM92 is not set # CONFIG_SENSORS_LM93 is not set # CONFIG_SENSORS_LM95234 is not set # CONFIG_SENSORS_LM95241 is not set # CONFIG_SENSORS_LM95245 is not set # CONFIG_SENSORS_NTC_THERMISTOR is not set # CONFIG_SENSORS_NCT7802 is not set # CONFIG_SENSORS_NCT7904 is not set # CONFIG_SENSORS_NPCM7XX is not set # CONFIG_SENSORS_OCC_P8_I2C is not set # CONFIG_SENSORS_PCF8591 is not set # CONFIG_PMBUS is not set # CONFIG_SENSORS_SHT15 is not set # CONFIG_SENSORS_SHT21 is not set # CONFIG_SENSORS_SHT3x is not set # CONFIG_SENSORS_SHTC1 is not set # CONFIG_SENSORS_SIS5595 is not set # CONFIG_SENSORS_EMC1403 is not set # CONFIG_SENSORS_EMC2103 is not set # CONFIG_SENSORS_EMC6W201 is not set # CONFIG_SENSORS_SMSC47M192 is not set # CONFIG_SENSORS_STTS751 is not set # CONFIG_SENSORS_SMM665 is not set # CONFIG_SENSORS_ADC128D818 is not set # CONFIG_SENSORS_ADS1015 is not set # CONFIG_SENSORS_ADS7828 is not set # CONFIG_SENSORS_ADS7871 is not set # CONFIG_SENSORS_AMC6821 is not set # CONFIG_SENSORS_INA209 is not set CONFIG_SENSORS_INA2XX=y # CONFIG_SENSORS_INA3221 is not set # CONFIG_SENSORS_TC74 is not set # CONFIG_SENSORS_THMC50 is not set # CONFIG_SENSORS_TMP102 is not set # CONFIG_SENSORS_TMP103 is not set # CONFIG_SENSORS_TMP108 is not set # CONFIG_SENSORS_TMP401 is not set # CONFIG_SENSORS_TMP421 is not set # CONFIG_SENSORS_VIA686A is not set # CONFIG_SENSORS_VT8231 is not set # CONFIG_SENSORS_W83773G is not set # CONFIG_SENSORS_W83781D is not set # CONFIG_SENSORS_W83791D is not set # CONFIG_SENSORS_W83792D is not set CONFIG_SENSORS_W83793=y # CONFIG_SENSORS_W83795 is not set # CONFIG_SENSORS_W83L785TS is not set # CONFIG_SENSORS_W83L786NG is not set # CONFIG_THERMAL is not set # CONFIG_WATCHDOG is not set CONFIG_SSB_POSSIBLE=y # CONFIG_SSB is not set CONFIG_BCMA_POSSIBLE=y # CONFIG_BCMA is not set # # Multifunction device drivers # # CONFIG_MFD_ACT8945A is not set # CONFIG_MFD_AS3711 is not set # CONFIG_MFD_AS3722 is not set # CONFIG_PMIC_ADP5520 is not set # CONFIG_MFD_AAT2870_CORE is not set # CONFIG_MFD_AT91_USART is not set # CONFIG_MFD_ATMEL_FLEXCOM is not set # CONFIG_MFD_ATMEL_HLCDC is not set # CONFIG_MFD_BCM590XX is not set # CONFIG_MFD_BD9571MWV is not set # CONFIG_MFD_AXP20X_I2C is not set # CONFIG_MFD_MADERA is not set # CONFIG_PMIC_DA903X is not set # CONFIG_MFD_DA9052_SPI is not set # CONFIG_MFD_DA9052_I2C is not set # CONFIG_MFD_DA9055 is not set # CONFIG_MFD_DA9062 is not set # CONFIG_MFD_DA9063 is not set # CONFIG_MFD_DA9150 is not set # CONFIG_MFD_DLN2 is not set # CONFIG_MFD_MC13XXX_SPI is not set # CONFIG_MFD_MC13XXX_I2C is not set # CONFIG_MFD_HI6421_PMIC is not set # CONFIG_HTC_PASIC3 is not set # CONFIG_HTC_I2CPLD is not set # CONFIG_LPC_ICH is not set # CONFIG_LPC_SCH is not set # CONFIG_MFD_JANZ_CMODIO is not set # CONFIG_MFD_KEMPLD is not set # CONFIG_MFD_88PM800 is not set # CONFIG_MFD_88PM805 is not set # CONFIG_MFD_88PM860X is not set # CONFIG_MFD_MAX14577 is not set # CONFIG_MFD_MAX77620 is not set # CONFIG_MFD_MAX77686 is not set # CONFIG_MFD_MAX77693 is not set # CONFIG_MFD_MAX77843 is not set # CONFIG_MFD_MAX8907 is not set # CONFIG_MFD_MAX8925 is not set # CONFIG_MFD_MAX8997 is not set # CONFIG_MFD_MAX8998 is not set # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_MENF21BMC is not set # CONFIG_EZX_PCAP is not set # CONFIG_MFD_CPCAP is not set # CONFIG_MFD_VIPERBOARD is not set # CONFIG_MFD_RETU is not set # CONFIG_MFD_PCF50633 is not set # CONFIG_MFD_RDC321X is not set # CONFIG_MFD_RT5033 is not set # CONFIG_MFD_RC5T583 is not set # CONFIG_MFD_RK808 is not set # CONFIG_MFD_RN5T618 is not set # CONFIG_MFD_SEC_CORE is not set # CONFIG_MFD_SI476X_CORE is not set # CONFIG_MFD_SM501 is not set # CONFIG_MFD_SKY81452 is not set # CONFIG_MFD_SMSC is not set # CONFIG_ABX500_CORE is not set # CONFIG_MFD_STMPE is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_LP3943 is not set # CONFIG_MFD_LP8788 is not set # CONFIG_MFD_TI_LMU is not set # CONFIG_MFD_PALMAS is not set # CONFIG_TPS6105X is not set # CONFIG_TPS65010 is not set # CONFIG_TPS6507X is not set # CONFIG_MFD_TPS65086 is not set # CONFIG_MFD_TPS65090 is not set # CONFIG_MFD_TPS65217 is not set # CONFIG_MFD_TI_LP873X is not set # CONFIG_MFD_TI_LP87565 is not set # CONFIG_MFD_TPS65218 is not set # CONFIG_MFD_TPS6586X is not set # CONFIG_MFD_TPS65910 is not set # CONFIG_MFD_TPS65912_I2C is not set # CONFIG_MFD_TPS65912_SPI is not set # CONFIG_MFD_TPS80031 is not set # CONFIG_TWL4030_CORE is not set # CONFIG_TWL6040_CORE is not set # CONFIG_MFD_WL1273_CORE is not set # CONFIG_MFD_LM3533 is not set # CONFIG_MFD_TC3589X is not set # CONFIG_MFD_VX855 is not set # CONFIG_MFD_ARIZONA_I2C is not set # CONFIG_MFD_ARIZONA_SPI is not set # CONFIG_MFD_WM8400 is not set # CONFIG_MFD_WM831X_I2C is not set # CONFIG_MFD_WM831X_SPI is not set # CONFIG_MFD_WM8350_I2C is not set # CONFIG_MFD_WM8994 is not set # CONFIG_MFD_ROHM_BD718XX is not set # CONFIG_REGULATOR is not set # CONFIG_RC_CORE is not set # CONFIG_MEDIA_SUPPORT is not set # # Graphics support # # CONFIG_AGP is not set CONFIG_VGA_ARB=y CONFIG_VGA_ARB_MAX_GPUS=16 # CONFIG_DRM is not set # CONFIG_DRM_DP_CEC is not set # # ACP (Audio CoProcessor) Configuration # # # AMD Library routines # # # Frame buffer Devices # # CONFIG_FB is not set # CONFIG_BACKLIGHT_LCD_SUPPORT is not set # # Console display driver support # CONFIG_VGA_CONSOLE=y # CONFIG_VGACON_SOFT_SCROLLBACK is not set CONFIG_DUMMY_CONSOLE=y CONFIG_DUMMY_CONSOLE_COLUMNS=80 CONFIG_DUMMY_CONSOLE_ROWS=25 # CONFIG_SOUND is not set # # HID support # CONFIG_HID=y # CONFIG_HID_BATTERY_STRENGTH is not set # CONFIG_HIDRAW is not set # CONFIG_UHID is not set CONFIG_HID_GENERIC=y # # Special HID drivers # # CONFIG_HID_A4TECH is not set # CONFIG_HID_ACCUTOUCH is not set # CONFIG_HID_ACRUX is not set # CONFIG_HID_APPLE is not set # CONFIG_HID_APPLEIR is not set # CONFIG_HID_AUREAL is not set # CONFIG_HID_BELKIN is not set # CONFIG_HID_BETOP_FF is not set # CONFIG_HID_CHERRY is not set # CONFIG_HID_CHICONY is not set # CONFIG_HID_COUGAR is not set # CONFIG_HID_CMEDIA is not set # CONFIG_HID_CYPRESS is not set # CONFIG_HID_DRAGONRISE is not set # CONFIG_HID_EMS_FF is not set # CONFIG_HID_ELECOM is not set # CONFIG_HID_ELO is not set # CONFIG_HID_EZKEY is not set # CONFIG_HID_GEMBIRD is not set # CONFIG_HID_GFRM is not set # CONFIG_HID_HOLTEK is not set # CONFIG_HID_KEYTOUCH is not set # CONFIG_HID_KYE is not set # CONFIG_HID_UCLOGIC is not set # CONFIG_HID_WALTOP is not set # CONFIG_HID_GYRATION is not set # CONFIG_HID_ICADE is not set # CONFIG_HID_ITE is not set # CONFIG_HID_JABRA is not set # CONFIG_HID_TWINHAN is not set # CONFIG_HID_KENSINGTON is not set # CONFIG_HID_LCPOWER is not set # CONFIG_HID_LENOVO is not set # CONFIG_HID_LOGITECH is not set # CONFIG_HID_MAGICMOUSE is not set # CONFIG_HID_MAYFLASH is not set # CONFIG_HID_REDRAGON is not set # CONFIG_HID_MICROSOFT is not set # CONFIG_HID_MONTEREY is not set # CONFIG_HID_MULTITOUCH is not set # CONFIG_HID_NTI is not set # CONFIG_HID_NTRIG is not set # CONFIG_HID_ORTEK is not set # CONFIG_HID_PANTHERLORD is not set # CONFIG_HID_PENMOUNT is not set # CONFIG_HID_PETALYNX is not set # CONFIG_HID_PICOLCD is not set # CONFIG_HID_PLANTRONICS is not set # CONFIG_HID_PRIMAX is not set # CONFIG_HID_RETRODE is not set # CONFIG_HID_ROCCAT is not set # CONFIG_HID_SAITEK is not set # CONFIG_HID_SAMSUNG is not set # CONFIG_HID_SPEEDLINK is not set # CONFIG_HID_STEAM is not set # CONFIG_HID_STEELSERIES is not set # CONFIG_HID_SUNPLUS is not set # CONFIG_HID_RMI is not set # CONFIG_HID_GREENASIA is not set # CONFIG_HID_SMARTJOYPLUS is not set # CONFIG_HID_TIVO is not set # CONFIG_HID_TOPSEED is not set # CONFIG_HID_THRUSTMASTER is not set # CONFIG_HID_UDRAW_PS3 is not set # CONFIG_HID_WACOM is not set # CONFIG_HID_XINMO is not set # CONFIG_HID_ZEROPLUS is not set # CONFIG_HID_ZYDACRON is not set # CONFIG_HID_SENSOR_HUB is not set # CONFIG_HID_ALPS is not set # # USB HID support # CONFIG_USB_HID=y # CONFIG_HID_PID is not set # CONFIG_USB_HIDDEV is not set # # I2C HID support # # CONFIG_I2C_HID is not set CONFIG_USB_OHCI_LITTLE_ENDIAN=y CONFIG_USB_SUPPORT=y CONFIG_USB_COMMON=y CONFIG_USB_ARCH_HAS_HCD=y CONFIG_USB=y CONFIG_USB_PCI=y # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set # # Miscellaneous USB options # CONFIG_USB_DEFAULT_PERSIST=y # CONFIG_USB_DYNAMIC_MINORS is not set # CONFIG_USB_OTG_WHITELIST is not set # CONFIG_USB_OTG_BLACKLIST_HUB is not set # CONFIG_USB_MON is not set # CONFIG_USB_WUSB_CBAF is not set # # USB Host Controller Drivers # # CONFIG_USB_C67X00_HCD is not set # CONFIG_USB_XHCI_HCD is not set CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_ROOT_HUB_TT=y CONFIG_USB_EHCI_TT_NEWSCHED=y CONFIG_USB_EHCI_PCI=y CONFIG_USB_EHCI_FSL=y CONFIG_USB_EHCI_HCD_PPC_OF=y # CONFIG_USB_EHCI_HCD_PLATFORM is not set # CONFIG_USB_OXU210HP_HCD is not set # CONFIG_USB_ISP116X_HCD is not set # CONFIG_USB_FOTG210_HCD is not set # CONFIG_USB_MAX3421_HCD is not set # CONFIG_USB_OHCI_HCD is not set # CONFIG_USB_UHCI_HCD is not set # CONFIG_USB_SL811_HCD is not set # CONFIG_USB_R8A66597_HCD is not set # CONFIG_USB_HCD_TEST_MODE is not set # # USB Device Class drivers # # CONFIG_USB_ACM is not set # CONFIG_USB_PRINTER is not set # CONFIG_USB_WDM is not set # CONFIG_USB_TMC is not set # # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may # # # also be needed; see USB_STORAGE Help for more info # CONFIG_USB_STORAGE=y # CONFIG_USB_STORAGE_DEBUG is not set # CONFIG_USB_STORAGE_REALTEK is not set # CONFIG_USB_STORAGE_DATAFAB is not set # CONFIG_USB_STORAGE_FREECOM is not set # CONFIG_USB_STORAGE_ISD200 is not set # CONFIG_USB_STORAGE_USBAT is not set # CONFIG_USB_STORAGE_SDDR09 is not set # CONFIG_USB_STORAGE_SDDR55 is not set # CONFIG_USB_STORAGE_JUMPSHOT is not set # CONFIG_USB_STORAGE_ALAUDA is not set # CONFIG_USB_STORAGE_ONETOUCH is not set # CONFIG_USB_STORAGE_KARMA is not set # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set # CONFIG_USB_STORAGE_ENE_UB6250 is not set # CONFIG_USB_UAS is not set # # USB Imaging devices # # CONFIG_USB_MDC800 is not set # CONFIG_USB_MICROTEK is not set # CONFIG_USBIP_CORE is not set # CONFIG_USB_MUSB_HDRC is not set # CONFIG_USB_DWC3 is not set # CONFIG_USB_DWC2 is not set # CONFIG_USB_CHIPIDEA is not set # CONFIG_USB_ISP1760 is not set # # USB port drivers # # CONFIG_USB_SERIAL is not set # # USB Miscellaneous drivers # # CONFIG_USB_EMI62 is not set # CONFIG_USB_EMI26 is not set # CONFIG_USB_ADUTUX is not set # CONFIG_USB_SEVSEG is not set # CONFIG_USB_RIO500 is not set # CONFIG_USB_LEGOTOWER is not set # CONFIG_USB_LCD is not set # CONFIG_USB_CYPRESS_CY7C63 is not set # CONFIG_USB_CYTHERM is not set # CONFIG_USB_IDMOUSE is not set # CONFIG_USB_FTDI_ELAN is not set # CONFIG_USB_APPLEDISPLAY is not set # CONFIG_USB_SISUSBVGA is not set # CONFIG_USB_LD is not set # CONFIG_USB_TRANCEVIBRATOR is not set # CONFIG_USB_IOWARRIOR is not set # CONFIG_USB_TEST is not set # CONFIG_USB_EHSET_TEST_FIXTURE is not set # CONFIG_USB_ISIGHTFW is not set # CONFIG_USB_YUREX is not set # CONFIG_USB_EZUSB_FX2 is not set # CONFIG_USB_HUB_USB251XB is not set # CONFIG_USB_HSIC_USB3503 is not set # CONFIG_USB_HSIC_USB4604 is not set # CONFIG_USB_LINK_LAYER_TEST is not set # CONFIG_USB_CHAOSKEY is not set # # USB Physical Layer drivers # # CONFIG_NOP_USB_XCEIV is not set # CONFIG_USB_GPIO_VBUS is not set # CONFIG_USB_ISP1301 is not set # CONFIG_USB_GADGET is not set # CONFIG_TYPEC is not set # CONFIG_USB_ROLE_SWITCH is not set # CONFIG_USB_ULPI_BUS is not set # CONFIG_UWB is not set CONFIG_MMC=y CONFIG_PWRSEQ_EMMC=y CONFIG_PWRSEQ_SIMPLE=y CONFIG_MMC_BLOCK=y CONFIG_MMC_BLOCK_MINORS=8 # CONFIG_SDIO_UART is not set # CONFIG_MMC_TEST is not set # # MMC/SD/SDIO Host Controller Drivers # # CONFIG_MMC_DEBUG is not set CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_IO_ACCESSORS=y # CONFIG_MMC_SDHCI_PCI is not set CONFIG_MMC_SDHCI_PLTFM=y # CONFIG_MMC_SDHCI_OF_ARASAN is not set # CONFIG_MMC_SDHCI_OF_AT91 is not set CONFIG_MMC_SDHCI_OF_ESDHC=y # CONFIG_MMC_SDHCI_OF_HLWD is not set # CONFIG_MMC_SDHCI_OF_DWCMSHC is not set # CONFIG_MMC_SDHCI_CADENCE is not set # CONFIG_MMC_SDHCI_F_SDH30 is not set # CONFIG_MMC_WBSD is not set # CONFIG_MMC_TIFM_SD is not set # CONFIG_MMC_SPI is not set # CONFIG_MMC_CB710 is not set # CONFIG_MMC_VIA_SDMMC is not set # CONFIG_MMC_VUB300 is not set # CONFIG_MMC_USHC is not set # CONFIG_MMC_USDHI6ROL0 is not set # CONFIG_MMC_CQHCI is not set # CONFIG_MMC_TOSHIBA_PCI is not set # CONFIG_MMC_MTK is not set # CONFIG_MMC_SDHCI_XENON is not set # CONFIG_MMC_SDHCI_OMAP is not set # CONFIG_MMC_SDHCI_AM654 is not set # CONFIG_MEMSTICK is not set # CONFIG_NEW_LEDS is not set # CONFIG_ACCESSIBILITY is not set # CONFIG_INFINIBAND is not set CONFIG_EDAC_ATOMIC_SCRUB=y CONFIG_EDAC_SUPPORT=y CONFIG_EDAC=y CONFIG_EDAC_LEGACY_SYSFS=y # CONFIG_EDAC_DEBUG is not set CONFIG_EDAC_MPC85XX=y # CONFIG_EDAC_CPC925 is not set CONFIG_RTC_LIB=y CONFIG_RTC_MC146818_LIB=y CONFIG_RTC_CLASS=y CONFIG_RTC_HCTOSYS=y CONFIG_RTC_HCTOSYS_DEVICE="rtc0" CONFIG_RTC_SYSTOHC=y CONFIG_RTC_SYSTOHC_DEVICE="rtc0" # CONFIG_RTC_DEBUG is not set CONFIG_RTC_NVMEM=y # # RTC interfaces # CONFIG_RTC_INTF_SYSFS=y CONFIG_RTC_INTF_PROC=y CONFIG_RTC_INTF_DEV=y # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set # CONFIG_RTC_DRV_TEST is not set # # I2C RTC drivers # # CONFIG_RTC_DRV_ABB5ZES3 is not set # CONFIG_RTC_DRV_ABX80X is not set CONFIG_RTC_DRV_DS1307=y # CONFIG_RTC_DRV_DS1307_CENTURY is not set CONFIG_RTC_DRV_DS1374=y # CONFIG_RTC_DRV_DS1374_WDT is not set # CONFIG_RTC_DRV_DS1672 is not set # CONFIG_RTC_DRV_HYM8563 is not set # CONFIG_RTC_DRV_MAX6900 is not set # CONFIG_RTC_DRV_RS5C372 is not set # CONFIG_RTC_DRV_ISL1208 is not set # CONFIG_RTC_DRV_ISL12022 is not set # CONFIG_RTC_DRV_ISL12026 is not set # CONFIG_RTC_DRV_X1205 is not set # CONFIG_RTC_DRV_PCF8523 is not set # CONFIG_RTC_DRV_PCF85063 is not set # CONFIG_RTC_DRV_PCF85363 is not set # CONFIG_RTC_DRV_PCF8563 is not set # CONFIG_RTC_DRV_PCF8583 is not set # CONFIG_RTC_DRV_M41T80 is not set # CONFIG_RTC_DRV_BQ32K is not set # CONFIG_RTC_DRV_S35390A is not set # CONFIG_RTC_DRV_FM3130 is not set # CONFIG_RTC_DRV_RX8010 is not set # CONFIG_RTC_DRV_RX8581 is not set # CONFIG_RTC_DRV_RX8025 is not set # CONFIG_RTC_DRV_EM3027 is not set # CONFIG_RTC_DRV_RV8803 is not set # # SPI RTC drivers # # CONFIG_RTC_DRV_M41T93 is not set # CONFIG_RTC_DRV_M41T94 is not set # CONFIG_RTC_DRV_DS1302 is not set # CONFIG_RTC_DRV_DS1305 is not set # CONFIG_RTC_DRV_DS1343 is not set # CONFIG_RTC_DRV_DS1347 is not set # CONFIG_RTC_DRV_DS1390 is not set # CONFIG_RTC_DRV_MAX6916 is not set # CONFIG_RTC_DRV_R9701 is not set # CONFIG_RTC_DRV_RX4581 is not set # CONFIG_RTC_DRV_RX6110 is not set # CONFIG_RTC_DRV_RS5C348 is not set # CONFIG_RTC_DRV_MAX6902 is not set # CONFIG_RTC_DRV_PCF2123 is not set # CONFIG_RTC_DRV_MCP795 is not set CONFIG_RTC_I2C_AND_SPI=y # # SPI and I2C RTC drivers # CONFIG_RTC_DRV_DS3232=y CONFIG_RTC_DRV_DS3232_HWMON=y # CONFIG_RTC_DRV_PCF2127 is not set # CONFIG_RTC_DRV_RV3029C2 is not set # # Platform RTC drivers # CONFIG_RTC_DRV_CMOS=y # CONFIG_RTC_DRV_DS1286 is not set # CONFIG_RTC_DRV_DS1511 is not set # CONFIG_RTC_DRV_DS1553 is not set # CONFIG_RTC_DRV_DS1685_FAMILY is not set # CONFIG_RTC_DRV_DS1742 is not set # CONFIG_RTC_DRV_DS2404 is not set # CONFIG_RTC_DRV_STK17TA8 is not set # CONFIG_RTC_DRV_M48T86 is not set # CONFIG_RTC_DRV_M48T35 is not set # CONFIG_RTC_DRV_M48T59 is not set # CONFIG_RTC_DRV_MSM6242 is not set # CONFIG_RTC_DRV_BQ4802 is not set # CONFIG_RTC_DRV_RP5C01 is not set # CONFIG_RTC_DRV_V3020 is not set # CONFIG_RTC_DRV_ZYNQMP is not set # # on-CPU RTC drivers # # CONFIG_RTC_DRV_GENERIC is not set # CONFIG_RTC_DRV_FTRTC010 is not set # CONFIG_RTC_DRV_SNVS is not set # CONFIG_RTC_DRV_R7301 is not set # # HID Sensor RTC drivers # # CONFIG_RTC_DRV_HID_SENSOR_TIME is not set CONFIG_DMADEVICES=y # CONFIG_DMADEVICES_DEBUG is not set # # DMA Devices # CONFIG_DMA_ENGINE=y CONFIG_DMA_OF=y # CONFIG_ALTERA_MSGDMA is not set # CONFIG_DW_AXI_DMAC is not set # CONFIG_FSL_DMA is not set # CONFIG_FSL_EDMA is not set # CONFIG_FSL_RAID is not set # CONFIG_INTEL_IDMA64 is not set # CONFIG_QCOM_HIDMA_MGMT is not set # CONFIG_QCOM_HIDMA is not set # CONFIG_DW_DMAC is not set # CONFIG_DW_DMAC_PCI is not set # # DMA Clients # # CONFIG_ASYNC_TX_DMA is not set # CONFIG_DMATEST is not set # # DMABUF options # # CONFIG_SYNC_FILE is not set # CONFIG_AUXDISPLAY is not set CONFIG_UIO=y # CONFIG_UIO_CIF is not set # CONFIG_UIO_PDRV_GENIRQ is not set # CONFIG_UIO_DMEM_GENIRQ is not set # CONFIG_UIO_AEC is not set # CONFIG_UIO_SERCOS3 is not set # CONFIG_UIO_PCI_GENERIC is not set # CONFIG_UIO_NETX is not set # CONFIG_UIO_FSL_ELBC_GPCM is not set # CONFIG_UIO_PRUSS is not set # CONFIG_UIO_MF624 is not set # CONFIG_VFIO is not set CONFIG_IRQ_BYPASS_MANAGER=y CONFIG_VIRT_DRIVERS=y CONFIG_FSL_HV_MANAGER=y CONFIG_VIRTIO_MENU=y # CONFIG_VIRTIO_PCI is not set # CONFIG_VIRTIO_MMIO is not set # # Microsoft Hyper-V guest support # CONFIG_STAGING=y # CONFIG_COMEDI is not set # CONFIG_RTL8192U is not set # CONFIG_RTLLIB is not set # CONFIG_R8712U is not set # CONFIG_RTS5208 is not set # # Speakup console speech # # CONFIG_SPEAKUP is not set # CONFIG_STAGING_MEDIA is not set # # Android # # CONFIG_STAGING_BOARD is not set # CONFIG_LTE_GDM724X is not set # CONFIG_GS_FPGABOOT is not set # CONFIG_UNISYSSPAR is not set # CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set # CONFIG_MOST is not set # CONFIG_KS7010 is not set # CONFIG_GREYBUS is not set # CONFIG_PI433 is not set # CONFIG_MTK_MMC is not set # # Gasket devices # # CONFIG_XIL_AXIS_FIFO is not set # CONFIG_EROFS_FS is not set CONFIG_CLKDEV_LOOKUP=y CONFIG_HAVE_CLK_PREPARE=y CONFIG_COMMON_CLK=y # # Common Clock Framework # # CONFIG_CLK_HSDK is not set # CONFIG_COMMON_CLK_MAX9485 is not set # CONFIG_COMMON_CLK_SI5351 is not set # CONFIG_COMMON_CLK_SI514 is not set # CONFIG_COMMON_CLK_SI544 is not set # CONFIG_COMMON_CLK_SI570 is not set # CONFIG_COMMON_CLK_CDCE706 is not set # CONFIG_COMMON_CLK_CDCE925 is not set # CONFIG_COMMON_CLK_CS2000_CP is not set CONFIG_CLK_QORIQ=y # CONFIG_COMMON_CLK_VC5 is not set # CONFIG_HWSPINLOCK is not set # # Clock Source drivers # # CONFIG_MAILBOX is not set CONFIG_IOMMU_API=y CONFIG_IOMMU_SUPPORT=y # # Generic IOMMU Pagetable Support # # CONFIG_IOMMU_DEBUGFS is not set # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set CONFIG_OF_IOMMU=y CONFIG_FSL_PAMU=y # # Remoteproc drivers # # CONFIG_REMOTEPROC is not set # # Rpmsg drivers # # CONFIG_RPMSG_VIRTIO is not set # CONFIG_SOUNDWIRE is not set # # SOC (System On Chip) specific Drivers # # # Amlogic SoC drivers # # # Broadcom SoC drivers # # # NXP/Freescale QorIQ SoC drivers # # CONFIG_FSL_DPAA is not set CONFIG_FSL_GUTS=y # # i.MX SoC drivers # # # Qualcomm SoC drivers # # CONFIG_SOC_TI is not set # # Xilinx SoC drivers # # CONFIG_XILINX_VCU is not set # CONFIG_PM_DEVFREQ is not set # CONFIG_EXTCON is not set CONFIG_MEMORY=y # CONFIG_FSL_CORENET_CF is not set CONFIG_FSL_IFC=y # CONFIG_IIO is not set # CONFIG_NTB is not set # CONFIG_VME_BUS is not set # CONFIG_PWM is not set # # IRQ chip support # CONFIG_IRQCHIP=y CONFIG_ARM_GIC_MAX_NR=1 # CONFIG_IPACK_BUS is not set # CONFIG_RESET_CONTROLLER is not set # CONFIG_FMC is not set # # PHY Subsystem # # CONFIG_GENERIC_PHY is not set # CONFIG_BCM_KONA_USB2_PHY is not set # CONFIG_PHY_CADENCE_DP is not set # CONFIG_PHY_FSL_IMX8MQ_USB is not set # CONFIG_PHY_PXA_28NM_HSIC is not set # CONFIG_PHY_PXA_28NM_USB2 is not set # CONFIG_PHY_MAPPHONE_MDM6600 is not set # CONFIG_POWERCAP is not set # CONFIG_MCB is not set # # Performance monitor support # CONFIG_RAS=y # # Android # # CONFIG_ANDROID is not set # CONFIG_LIBNVDIMM is not set # CONFIG_DAX is not set CONFIG_NVMEM=y # # HW tracing support # # CONFIG_STM is not set # CONFIG_INTEL_TH is not set # CONFIG_FPGA is not set # CONFIG_FSI is not set # CONFIG_SIOX is not set # CONFIG_SLIMBUS is not set # # File systems # CONFIG_FS_IOMAP=y CONFIG_EXT2_FS=y # CONFIG_EXT2_FS_XATTR is not set CONFIG_EXT3_FS=y # CONFIG_EXT3_FS_POSIX_ACL is not set # CONFIG_EXT3_FS_SECURITY is not set CONFIG_EXT4_FS=y # CONFIG_EXT4_FS_POSIX_ACL is not set # CONFIG_EXT4_FS_SECURITY is not set # CONFIG_EXT4_ENCRYPTION is not set # CONFIG_EXT4_DEBUG is not set CONFIG_JBD2=y # CONFIG_JBD2_DEBUG is not set CONFIG_FS_MBCACHE=y # CONFIG_REISERFS_FS is not set # CONFIG_JFS_FS is not set # CONFIG_XFS_FS is not set # CONFIG_GFS2_FS is not set # CONFIG_BTRFS_FS is not set # CONFIG_NILFS2_FS is not set # CONFIG_F2FS_FS is not set # CONFIG_FS_DAX is not set CONFIG_EXPORTFS=m # CONFIG_EXPORTFS_BLOCK_OPS is not set CONFIG_FILE_LOCKING=y CONFIG_MANDATORY_FILE_LOCKING=y # CONFIG_FS_ENCRYPTION is not set CONFIG_FSNOTIFY=y CONFIG_DNOTIFY=y CONFIG_INOTIFY_USER=y # CONFIG_FANOTIFY is not set # CONFIG_QUOTA is not set # CONFIG_AUTOFS4_FS is not set # CONFIG_AUTOFS_FS is not set # CONFIG_FUSE_FS is not set # CONFIG_OVERLAY_FS is not set # # Caches # # CONFIG_FSCACHE is not set # # CD-ROM/DVD Filesystems # CONFIG_ISO9660_FS=m CONFIG_JOLIET=y CONFIG_ZISOFS=y CONFIG_UDF_FS=m # # DOS/FAT/NT Filesystems # CONFIG_FAT_FS=y CONFIG_MSDOS_FS=m CONFIG_VFAT_FS=y CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" # CONFIG_FAT_DEFAULT_UTF8 is not set CONFIG_NTFS_FS=y # CONFIG_NTFS_DEBUG is not set # CONFIG_NTFS_RW is not set # # Pseudo filesystems # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y CONFIG_PROC_SYSCTL=y CONFIG_PROC_PAGE_MONITOR=y # CONFIG_PROC_CHILDREN is not set CONFIG_KERNFS=y CONFIG_SYSFS=y CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set # CONFIG_TMPFS_XATTR is not set CONFIG_HUGETLBFS=y CONFIG_HUGETLB_PAGE=y CONFIG_MEMFD_CREATE=y # CONFIG_CONFIGFS_FS is not set CONFIG_MISC_FILESYSTEMS=y # CONFIG_ORANGEFS_FS is not set # CONFIG_ADFS_FS is not set # CONFIG_AFFS_FS is not set # CONFIG_ECRYPT_FS is not set # CONFIG_HFS_FS is not set # CONFIG_HFSPLUS_FS is not set # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS_DEBUG=0 CONFIG_JFFS2_FS_WRITEBUFFER=y # CONFIG_JFFS2_FS_WBUF_VERIFY is not set # CONFIG_JFFS2_SUMMARY is not set # CONFIG_JFFS2_FS_XATTR is not set # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set CONFIG_JFFS2_ZLIB=y CONFIG_JFFS2_RTIME=y CONFIG_CRAMFS=y CONFIG_CRAMFS_BLOCKDEV=y # CONFIG_CRAMFS_MTD is not set # CONFIG_SQUASHFS is not set # CONFIG_VXFS_FS is not set # CONFIG_MINIX_FS is not set # CONFIG_OMFS_FS is not set # CONFIG_HPFS_FS is not set # CONFIG_QNX4FS_FS is not set # CONFIG_QNX6FS_FS is not set # CONFIG_ROMFS_FS is not set # CONFIG_PSTORE is not set # CONFIG_SYSV_FS is not set # CONFIG_UFS_FS is not set CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y CONFIG_NFS_V2=y CONFIG_NFS_V3=y # CONFIG_NFS_V3_ACL is not set CONFIG_NFS_V4=y # CONFIG_NFS_SWAP is not set # CONFIG_NFS_V4_1 is not set CONFIG_ROOT_NFS=y # CONFIG_NFS_USE_LEGACY_DNS is not set CONFIG_NFS_USE_KERNEL_DNS=y CONFIG_NFSD=m # CONFIG_NFSD_V3 is not set # CONFIG_NFSD_V4 is not set CONFIG_GRACE_PERIOD=y CONFIG_LOCKD=y CONFIG_LOCKD_V4=y CONFIG_NFS_COMMON=y CONFIG_SUNRPC=y CONFIG_SUNRPC_GSS=y # CONFIG_SUNRPC_DEBUG is not set # CONFIG_CEPH_FS is not set # CONFIG_CIFS is not set # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set CONFIG_NLS=y CONFIG_NLS_DEFAULT="iso8859-1" CONFIG_NLS_CODEPAGE_437=y # CONFIG_NLS_CODEPAGE_737 is not set # CONFIG_NLS_CODEPAGE_775 is not set CONFIG_NLS_CODEPAGE_850=y # CONFIG_NLS_CODEPAGE_852 is not set # CONFIG_NLS_CODEPAGE_855 is not set # CONFIG_NLS_CODEPAGE_857 is not set # CONFIG_NLS_CODEPAGE_860 is not set # CONFIG_NLS_CODEPAGE_861 is not set # CONFIG_NLS_CODEPAGE_862 is not set # CONFIG_NLS_CODEPAGE_863 is not set # CONFIG_NLS_CODEPAGE_864 is not set # CONFIG_NLS_CODEPAGE_865 is not set # CONFIG_NLS_CODEPAGE_866 is not set # CONFIG_NLS_CODEPAGE_869 is not set # CONFIG_NLS_CODEPAGE_936 is not set # CONFIG_NLS_CODEPAGE_950 is not set # CONFIG_NLS_CODEPAGE_932 is not set # CONFIG_NLS_CODEPAGE_949 is not set # CONFIG_NLS_CODEPAGE_874 is not set # CONFIG_NLS_ISO8859_8 is not set # CONFIG_NLS_CODEPAGE_1250 is not set # CONFIG_NLS_CODEPAGE_1251 is not set # CONFIG_NLS_ASCII is not set CONFIG_NLS_ISO8859_1=y # CONFIG_NLS_ISO8859_2 is not set # CONFIG_NLS_ISO8859_3 is not set # CONFIG_NLS_ISO8859_4 is not set # CONFIG_NLS_ISO8859_5 is not set # CONFIG_NLS_ISO8859_6 is not set # CONFIG_NLS_ISO8859_7 is not set # CONFIG_NLS_ISO8859_9 is not set # CONFIG_NLS_ISO8859_13 is not set # CONFIG_NLS_ISO8859_14 is not set # CONFIG_NLS_ISO8859_15 is not set # CONFIG_NLS_KOI8_R is not set # CONFIG_NLS_KOI8_U is not set # CONFIG_NLS_MAC_ROMAN is not set # CONFIG_NLS_MAC_CELTIC is not set # CONFIG_NLS_MAC_CENTEURO is not set # CONFIG_NLS_MAC_CROATIAN is not set # CONFIG_NLS_MAC_CYRILLIC is not set # CONFIG_NLS_MAC_GAELIC is not set # CONFIG_NLS_MAC_GREEK is not set # CONFIG_NLS_MAC_ICELAND is not set # CONFIG_NLS_MAC_INUIT is not set # CONFIG_NLS_MAC_ROMANIAN is not set # CONFIG_NLS_MAC_TURKISH is not set CONFIG_NLS_UTF8=m # # Security options # CONFIG_KEYS=y CONFIG_KEYS_COMPAT=y # CONFIG_PERSISTENT_KEYRINGS is not set # CONFIG_BIG_KEYS is not set # CONFIG_ENCRYPTED_KEYS is not set # CONFIG_KEY_DH_OPERATIONS is not set # CONFIG_SECURITY_DMESG_RESTRICT is not set # CONFIG_SECURITY is not set # CONFIG_SECURITYFS is not set CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y # CONFIG_HARDENED_USERCOPY is not set # CONFIG_FORTIFY_SOURCE is not set # CONFIG_STATIC_USERMODEHELPER is not set CONFIG_DEFAULT_SECURITY_DAC=y CONFIG_DEFAULT_SECURITY="" CONFIG_CRYPTO=y # # Crypto core or helper # CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_ALGAPI2=y CONFIG_CRYPTO_AEAD=y CONFIG_CRYPTO_AEAD2=y CONFIG_CRYPTO_BLKCIPHER=y CONFIG_CRYPTO_BLKCIPHER2=y CONFIG_CRYPTO_HASH=y CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_RNG=y CONFIG_CRYPTO_RNG2=y CONFIG_CRYPTO_RNG_DEFAULT=y CONFIG_CRYPTO_AKCIPHER2=y CONFIG_CRYPTO_AKCIPHER=y CONFIG_CRYPTO_KPP2=y CONFIG_CRYPTO_ACOMP2=y CONFIG_CRYPTO_RSA=y # CONFIG_CRYPTO_DH is not set # CONFIG_CRYPTO_ECDH is not set CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_MANAGER2=y # CONFIG_CRYPTO_USER is not set CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y # CONFIG_CRYPTO_GF128MUL is not set CONFIG_CRYPTO_NULL=y CONFIG_CRYPTO_NULL2=y # CONFIG_CRYPTO_PCRYPT is not set CONFIG_CRYPTO_WORKQUEUE=y # CONFIG_CRYPTO_CRYPTD is not set CONFIG_CRYPTO_AUTHENC=y # CONFIG_CRYPTO_TEST is not set # # Authenticated Encryption with Associated Data # # CONFIG_CRYPTO_CCM is not set # CONFIG_CRYPTO_GCM is not set # CONFIG_CRYPTO_CHACHA20POLY1305 is not set # CONFIG_CRYPTO_AEGIS128 is not set # CONFIG_CRYPTO_AEGIS128L is not set # CONFIG_CRYPTO_AEGIS256 is not set # CONFIG_CRYPTO_MORUS640 is not set # CONFIG_CRYPTO_MORUS1280 is not set # CONFIG_CRYPTO_SEQIV is not set CONFIG_CRYPTO_ECHAINIV=y # # Block modes # CONFIG_CRYPTO_CBC=y # CONFIG_CRYPTO_CFB is not set # CONFIG_CRYPTO_CTR is not set # CONFIG_CRYPTO_CTS is not set # CONFIG_CRYPTO_ECB is not set # CONFIG_CRYPTO_LRW is not set # CONFIG_CRYPTO_OFB is not set CONFIG_CRYPTO_PCBC=m # CONFIG_CRYPTO_XTS is not set # CONFIG_CRYPTO_KEYWRAP is not set # CONFIG_CRYPTO_ADIANTUM is not set # # Hash modes # # CONFIG_CRYPTO_CMAC is not set CONFIG_CRYPTO_HMAC=y # CONFIG_CRYPTO_XCBC is not set # CONFIG_CRYPTO_VMAC is not set # # Digest # CONFIG_CRYPTO_CRC32C=y # CONFIG_CRYPTO_CRC32C_VPMSUM is not set # CONFIG_CRYPTO_CRC32 is not set # CONFIG_CRYPTO_CRCT10DIF is not set # CONFIG_CRYPTO_GHASH is not set # CONFIG_CRYPTO_POLY1305 is not set CONFIG_CRYPTO_MD4=y CONFIG_CRYPTO_MD5=y # CONFIG_CRYPTO_MD5_PPC is not set # CONFIG_CRYPTO_MICHAEL_MIC is not set # CONFIG_CRYPTO_RMD128 is not set # CONFIG_CRYPTO_RMD160 is not set # CONFIG_CRYPTO_RMD256 is not set # CONFIG_CRYPTO_RMD320 is not set CONFIG_CRYPTO_SHA1=y # CONFIG_CRYPTO_SHA1_PPC is not set CONFIG_CRYPTO_SHA256=y CONFIG_CRYPTO_SHA512=y # CONFIG_CRYPTO_SHA3 is not set # CONFIG_CRYPTO_SM3 is not set # CONFIG_CRYPTO_STREEBOG is not set # CONFIG_CRYPTO_TGR192 is not set # CONFIG_CRYPTO_WP512 is not set # # Ciphers # CONFIG_CRYPTO_AES=y # CONFIG_CRYPTO_AES_TI is not set # CONFIG_CRYPTO_ANUBIS is not set # CONFIG_CRYPTO_ARC4 is not set # CONFIG_CRYPTO_BLOWFISH is not set # CONFIG_CRYPTO_CAMELLIA is not set # CONFIG_CRYPTO_CAST5 is not set # CONFIG_CRYPTO_CAST6 is not set CONFIG_CRYPTO_DES=y # CONFIG_CRYPTO_FCRYPT is not set # CONFIG_CRYPTO_KHAZAD is not set # CONFIG_CRYPTO_SALSA20 is not set # CONFIG_CRYPTO_CHACHA20 is not set # CONFIG_CRYPTO_SEED is not set # CONFIG_CRYPTO_SERPENT is not set # CONFIG_CRYPTO_SM4 is not set # CONFIG_CRYPTO_TEA is not set # CONFIG_CRYPTO_TWOFISH is not set # # Compression # CONFIG_CRYPTO_DEFLATE=y # CONFIG_CRYPTO_LZO is not set # CONFIG_CRYPTO_842 is not set # CONFIG_CRYPTO_LZ4 is not set # CONFIG_CRYPTO_LZ4HC is not set # CONFIG_CRYPTO_ZSTD is not set # # Random Number Generation # # CONFIG_CRYPTO_ANSI_CPRNG is not set CONFIG_CRYPTO_DRBG_MENU=y CONFIG_CRYPTO_DRBG_HMAC=y # CONFIG_CRYPTO_DRBG_HASH is not set CONFIG_CRYPTO_DRBG=y CONFIG_CRYPTO_JITTERENTROPY=y # CONFIG_CRYPTO_USER_API_HASH is not set # CONFIG_CRYPTO_USER_API_SKCIPHER is not set # CONFIG_CRYPTO_USER_API_RNG is not set # CONFIG_CRYPTO_USER_API_AEAD is not set CONFIG_CRYPTO_HW=y CONFIG_CRYPTO_DEV_FSL_CAAM_COMMON=y CONFIG_CRYPTO_DEV_FSL_CAAM=y # CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG is not set CONFIG_CRYPTO_DEV_FSL_CAAM_JR=y CONFIG_CRYPTO_DEV_FSL_CAAM_RINGSIZE=9 # CONFIG_CRYPTO_DEV_FSL_CAAM_INTC is not set CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API=y CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API=y CONFIG_CRYPTO_DEV_FSL_CAAM_PKC_API=y CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_API=y CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC=y CONFIG_CRYPTO_DEV_FSL_CAAM_AHASH_API_DESC=y # CONFIG_CRYPTO_DEV_TALITOS is not set # CONFIG_CRYPTO_DEV_NX is not set # CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set # CONFIG_CRYPTO_DEV_CCREE is not set # CONFIG_ASYMMETRIC_KEY_TYPE is not set # # Certificates for signature checking # # CONFIG_SYSTEM_BLACKLIST_KEYRING is not set CONFIG_BINARY_PRINTF=y # # Library routines # CONFIG_BITREVERSE=y CONFIG_RATIONAL=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y CONFIG_GENERIC_NET_UTILS=y CONFIG_GENERIC_PCI_IOMAP=y CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y # CONFIG_CRC_CCITT is not set CONFIG_CRC16=y # CONFIG_CRC_T10DIF is not set CONFIG_CRC_ITU_T=m CONFIG_CRC32=y # CONFIG_CRC32_SELFTEST is not set CONFIG_CRC32_SLICEBY8=y # CONFIG_CRC32_SLICEBY4 is not set # CONFIG_CRC32_SARWATE is not set # CONFIG_CRC32_BIT is not set # CONFIG_CRC64 is not set # CONFIG_CRC4 is not set # CONFIG_CRC7 is not set CONFIG_LIBCRC32C=y # CONFIG_CRC8 is not set # CONFIG_RANDOM32_SELFTEST is not set CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y CONFIG_LZO_DECOMPRESS=y CONFIG_LZ4_DECOMPRESS=y CONFIG_XZ_DEC=y CONFIG_XZ_DEC_X86=y CONFIG_XZ_DEC_POWERPC=y CONFIG_XZ_DEC_IA64=y CONFIG_XZ_DEC_ARM=y CONFIG_XZ_DEC_ARMTHUMB=y CONFIG_XZ_DEC_SPARC=y CONFIG_XZ_DEC_BCJ=y # CONFIG_XZ_DEC_TEST is not set CONFIG_DECOMPRESS_GZIP=y CONFIG_DECOMPRESS_BZIP2=y CONFIG_DECOMPRESS_LZMA=y CONFIG_DECOMPRESS_XZ=y CONFIG_DECOMPRESS_LZO=y CONFIG_DECOMPRESS_LZ4=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_ASSOCIATIVE_ARRAY=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT_MAP=y CONFIG_HAS_DMA=y CONFIG_NEED_SG_DMA_LENGTH=y CONFIG_NEED_DMA_MAP_STATE=y CONFIG_ARCH_DMA_ADDR_T_64BIT=y CONFIG_ARCH_HAS_DMA_SET_MASK=y CONFIG_SWIOTLB=y CONFIG_SGL_ALLOC=y CONFIG_IOMMU_HELPER=y CONFIG_CPU_RMAP=y CONFIG_DQL=y CONFIG_GLOB=y # CONFIG_GLOB_SELFTEST is not set CONFIG_NLATTR=y CONFIG_CLZ_TAB=y # CONFIG_CORDIC is not set # CONFIG_DDR is not set # CONFIG_IRQ_POLL is not set CONFIG_MPILIB=y CONFIG_LIBFDT=y CONFIG_OID_REGISTRY=y CONFIG_SG_POOL=y CONFIG_ARCH_HAS_PMEM_API=y CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y CONFIG_STACKDEPOT=y CONFIG_SBITMAP=y # CONFIG_STRING_SELFTEST is not set # # Kernel hacking # # # printk and dmesg options # # CONFIG_PRINTK_TIME is not set CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 CONFIG_CONSOLE_LOGLEVEL_QUIET=4 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_DYNAMIC_DEBUG is not set # # Compile-time checks and compiler options # # CONFIG_DEBUG_INFO is not set CONFIG_ENABLE_MUST_CHECK=y CONFIG_FRAME_WARN=2048 # CONFIG_STRIP_ASM_SYMS is not set # CONFIG_READABLE_ASM is not set # CONFIG_UNUSED_SYMBOLS is not set # CONFIG_PAGE_OWNER is not set CONFIG_DEBUG_FS=y # CONFIG_HEADERS_CHECK is not set # CONFIG_DEBUG_SECTION_MISMATCH is not set CONFIG_SECTION_MISMATCH_WARN_ONLY=y # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 CONFIG_MAGIC_SYSRQ_SERIAL=y CONFIG_DEBUG_KERNEL=y # # Memory Debugging # # CONFIG_PAGE_EXTENSION is not set # CONFIG_DEBUG_PAGEALLOC is not set # CONFIG_PAGE_POISONING is not set # CONFIG_DEBUG_PAGE_REF is not set # CONFIG_DEBUG_OBJECTS is not set # CONFIG_DEBUG_SLAB is not set CONFIG_HAVE_DEBUG_KMEMLEAK=y # CONFIG_DEBUG_KMEMLEAK is not set # CONFIG_DEBUG_STACK_USAGE is not set # CONFIG_DEBUG_VM is not set CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y # CONFIG_DEBUG_VIRTUAL is not set # CONFIG_DEBUG_MEMORY_INIT is not set # CONFIG_DEBUG_PER_CPU_MAPS is not set CONFIG_HAVE_DEBUG_STACKOVERFLOW=y CONFIG_DEBUG_STACKOVERFLOW=y CONFIG_HAVE_ARCH_KASAN=y CONFIG_CC_HAS_KASAN_GENERIC=y CONFIG_KASAN=y CONFIG_KASAN_GENERIC=y # CONFIG_KASAN_EXTRA is not set CONFIG_KASAN_OUTLINE=y # CONFIG_KASAN_INLINE is not set CONFIG_TEST_KASAN=m CONFIG_ARCH_HAS_KCOV=y CONFIG_CC_HAS_SANCOV_TRACE_PC=y # CONFIG_KCOV is not set CONFIG_DEBUG_SHIRQ=y # # Debug Lockups and Hangs # # CONFIG_SOFTLOCKUP_DETECTOR is not set # CONFIG_HARDLOCKUP_DETECTOR is not set CONFIG_DETECT_HUNG_TASK=y CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 # CONFIG_WQ_WATCHDOG is not set # CONFIG_PANIC_ON_OOPS is not set CONFIG_PANIC_ON_OOPS_VALUE=0 # CONFIG_SCHED_DEBUG is not set # CONFIG_SCHEDSTATS is not set # CONFIG_SCHED_STACK_END_CHECK is not set # CONFIG_DEBUG_TIMEKEEPING is not set # # Lock Debugging (spinlocks, mutexes, etc...) # CONFIG_LOCK_DEBUGGING_SUPPORT=y # CONFIG_PROVE_LOCKING is not set # CONFIG_LOCK_STAT is not set # CONFIG_DEBUG_RT_MUTEXES is not set # CONFIG_DEBUG_SPINLOCK is not set # CONFIG_DEBUG_MUTEXES is not set # CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set # CONFIG_DEBUG_RWSEMS is not set # CONFIG_DEBUG_LOCK_ALLOC is not set # CONFIG_DEBUG_ATOMIC_SLEEP is not set # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set # CONFIG_LOCK_TORTURE_TEST is not set # CONFIG_WW_MUTEX_SELFTEST is not set CONFIG_STACKTRACE=y # CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set # CONFIG_DEBUG_KOBJECT is not set CONFIG_DEBUG_BUGVERBOSE=y # CONFIG_DEBUG_LIST is not set # CONFIG_DEBUG_PI_LIST is not set # CONFIG_DEBUG_SG is not set # CONFIG_DEBUG_NOTIFIERS is not set # CONFIG_DEBUG_CREDENTIALS is not set # # RCU Debugging # # CONFIG_RCU_PERF_TEST is not set # CONFIG_RCU_TORTURE_TEST is not set CONFIG_RCU_CPU_STALL_TIMEOUT=21 CONFIG_RCU_TRACE=y # CONFIG_RCU_EQS_DEBUG is not set # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set # CONFIG_NOTIFIER_ERROR_INJECTION is not set CONFIG_FUNCTION_ERROR_INJECTION=y # CONFIG_FAULT_INJECTION is not set # CONFIG_LATENCYTOP is not set CONFIG_NOP_TRACER=y CONFIG_HAVE_FUNCTION_TRACER=y CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y CONFIG_HAVE_DYNAMIC_FTRACE=y CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y CONFIG_HAVE_SYSCALL_TRACEPOINTS=y CONFIG_TRACE_CLOCK=y CONFIG_RING_BUFFER=y CONFIG_EVENT_TRACING=y CONFIG_CONTEXT_SWITCH_TRACER=y CONFIG_TRACING=y CONFIG_TRACING_SUPPORT=y CONFIG_FTRACE=y # CONFIG_FUNCTION_TRACER is not set # CONFIG_PREEMPTIRQ_EVENTS is not set # CONFIG_IRQSOFF_TRACER is not set # CONFIG_SCHED_TRACER is not set # CONFIG_HWLAT_TRACER is not set # CONFIG_ENABLE_DEFAULT_TRACERS is not set # CONFIG_FTRACE_SYSCALLS is not set # CONFIG_TRACER_SNAPSHOT is not set CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set # CONFIG_PROFILE_ALL_BRANCHES is not set # CONFIG_STACK_TRACER is not set # CONFIG_BLK_DEV_IO_TRACE is not set CONFIG_KPROBE_EVENTS=y CONFIG_UPROBE_EVENTS=y CONFIG_DYNAMIC_EVENTS=y CONFIG_PROBE_EVENTS=y # CONFIG_HIST_TRIGGERS is not set # CONFIG_TRACEPOINT_BENCHMARK is not set # CONFIG_RING_BUFFER_BENCHMARK is not set # CONFIG_RING_BUFFER_STARTUP_TEST is not set # CONFIG_PREEMPTIRQ_DELAY_TEST is not set # CONFIG_TRACE_EVAL_MAP_FILE is not set CONFIG_TRACING_EVENTS_GPIO=y # CONFIG_DMA_API_DEBUG is not set CONFIG_RUNTIME_TESTING_MENU=y # CONFIG_LKDTM is not set # CONFIG_TEST_LIST_SORT is not set # CONFIG_TEST_SORT is not set # CONFIG_KPROBES_SANITY_TEST is not set # CONFIG_BACKTRACE_SELF_TEST is not set # CONFIG_RBTREE_TEST is not set # CONFIG_INTERVAL_TREE_TEST is not set # CONFIG_PERCPU_TEST is not set # CONFIG_ATOMIC64_SELFTEST is not set # CONFIG_TEST_HEXDUMP is not set # CONFIG_TEST_STRING_HELPERS is not set # CONFIG_TEST_KSTRTOX is not set # CONFIG_TEST_PRINTF is not set # CONFIG_TEST_BITMAP is not set # CONFIG_TEST_BITFIELD is not set # CONFIG_TEST_UUID is not set # CONFIG_TEST_XARRAY is not set # CONFIG_TEST_OVERFLOW is not set # CONFIG_TEST_RHASHTABLE is not set # CONFIG_TEST_HASH is not set # CONFIG_TEST_IDA is not set # CONFIG_TEST_LKM is not set # CONFIG_TEST_USER_COPY is not set # CONFIG_TEST_BPF is not set # CONFIG_FIND_BIT_BENCHMARK is not set # CONFIG_TEST_FIRMWARE is not set # CONFIG_TEST_SYSCTL is not set # CONFIG_TEST_UDELAY is not set # CONFIG_TEST_STATIC_KEYS is not set # CONFIG_TEST_KMOD is not set # CONFIG_TEST_MEMCAT_P is not set # CONFIG_MEMTEST is not set # CONFIG_BUG_ON_DATA_CORRUPTION is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y # CONFIG_KGDB is not set CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y # CONFIG_UBSAN is not set CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y CONFIG_STRICT_DEVMEM=y # CONFIG_IO_STRICT_DEVMEM is not set # CONFIG_PPC_DISABLE_WERROR is not set CONFIG_PPC_WERROR=y CONFIG_PRINT_STACK_DEPTH=64 # CONFIG_PPC_EMULATED_STATS is not set # CONFIG_CODE_PATCHING_SELFTEST is not set CONFIG_JUMP_LABEL_FEATURE_CHECKS=y # CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG is not set # CONFIG_FTR_FIXUP_SELFTEST is not set # CONFIG_MSI_BITMAP_SELFTEST is not set # CONFIG_PPC_IRQ_SOFT_MASK_DEBUG is not set # CONFIG_XMON is not set CONFIG_PPC_EARLY_DEBUG=y CONFIG_PPC_EARLY_DEBUG_MEMCONS=y CONFIG_PPC_MEMCONS_OUTPUT_SIZE=4096 CONFIG_PPC_MEMCONS_INPUT_SIZE=128 CONFIG_PPC_PTDUMP=y ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v9 02/11] powerpc: prepare string/mem functions for KASAN 2019-03-04 5:26 ` [PATCH v9 02/11] powerpc: prepare string/mem functions for KASAN Daniel Axtens 2019-03-06 21:54 ` Christophe Leroy @ 2019-03-07 6:19 ` Christophe Leroy 2019-03-08 4:49 ` Daniel Axtens 1 sibling, 1 reply; 5+ messages in thread From: Christophe Leroy @ 2019-03-07 6:19 UTC (permalink / raw) To: Daniel Axtens, Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman, Nicholas Piggin, Aneesh Kumar K.V, Andrey Ryabinin, Alexander Potapenko, Dmitry Vyukov Cc: linux-kernel, linuxppc-dev, kasan-dev, linux-mm Hi Daniel, On 03/04/2019 05:26 AM, Daniel Axtens wrote: > Hi Christophe, >> diff --git a/arch/powerpc/include/asm/kasan.h b/arch/powerpc/include/asm/kasan.h >> new file mode 100644 >> index 000000000000..c3161b8fc017 >> --- /dev/null >> +++ b/arch/powerpc/include/asm/kasan.h >> @@ -0,0 +1,15 @@ >> +/* SPDX-License-Identifier: GPL-2.0 */ >> +#ifndef __ASM_KASAN_H >> +#define __ASM_KASAN_H >> + >> +#ifdef CONFIG_KASAN >> +#define _GLOBAL_KASAN(fn) .weak fn ; _GLOBAL(__##fn) ; _GLOBAL(fn) >> +#define _GLOBAL_TOC_KASAN(fn) .weak fn ; _GLOBAL_TOC(__##fn) ; _GLOBAL_TOC(fn) >> +#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(__##fn) ; EXPORT_SYMBOL(fn) > > I'm having some trouble with this. I get warnings like this: > > WARNING: EXPORT symbol "__memcpy" [vmlinux] version generation failed, symbol will not be versioned. I don't have this problem, neither with my PPC32 defconfigs nor with ppc64e_defconfig - SPARSEMEM_VMEMMAP + KASAN Using GCC 8.1 I've been looking into it in more details and can't understand the need for a weak symbol. A weak symbol is to allow it's optional replacement by other code. But here KASAN replaces it inconditionally, so I see no point for a weak symbol here. Regarding the export of the functions, I believe that when the functions are defined in KASAN, they should be exported by KASAN and not by the arch. But such a change is out of scope for now. So lets have a double export for now, one day we will drop it. Regarding export of __memcpy() etc..., there is at least the LKDTM module which inhibits KASAN, so it really needs to be exported. What about the patch below ? Christophe diff --git a/arch/powerpc/include/asm/kasan.h b/arch/powerpc/include/asm/kasan.h new file mode 100644 index 000000000000..2c179a39d4ba --- /dev/null +++ b/arch/powerpc/include/asm/kasan.h @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __ASM_KASAN_H +#define __ASM_KASAN_H + +#ifdef CONFIG_KASAN +#define _GLOBAL_KASAN(fn) _GLOBAL(__##fn) +#define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(__##fn) +#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(__##fn) +#else +#define _GLOBAL_KASAN(fn) _GLOBAL(fn) +#define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(fn) +#define EXPORT_SYMBOL_KASAN(fn) +#endif + +#endif diff --git a/arch/powerpc/include/asm/string.h b/arch/powerpc/include/asm/string.h index 1647de15a31e..9bf6dffb4090 100644 --- a/arch/powerpc/include/asm/string.h +++ b/arch/powerpc/include/asm/string.h @@ -4,14 +4,17 @@ #ifdef __KERNEL__ +#ifndef CONFIG_KASAN #define __HAVE_ARCH_STRNCPY #define __HAVE_ARCH_STRNCMP +#define __HAVE_ARCH_MEMCHR +#define __HAVE_ARCH_MEMCMP +#define __HAVE_ARCH_MEMSET16 +#endif + #define __HAVE_ARCH_MEMSET #define __HAVE_ARCH_MEMCPY #define __HAVE_ARCH_MEMMOVE -#define __HAVE_ARCH_MEMCMP -#define __HAVE_ARCH_MEMCHR -#define __HAVE_ARCH_MEMSET16 #define __HAVE_ARCH_MEMCPY_FLUSHCACHE extern char * strcpy(char *,const char *); @@ -27,7 +30,27 @@ extern int memcmp(const void *,const void *,__kernel_size_t); extern void * memchr(const void *,int,__kernel_size_t); extern void * memcpy_flushcache(void *,const void *,__kernel_size_t); +void *__memset(void *s, int c, __kernel_size_t count); +void *__memcpy(void *to, const void *from, __kernel_size_t n); +void *__memmove(void *to, const void *from, __kernel_size_t n); + +#if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__) +/* + * For files that are not instrumented (e.g. mm/slub.c) we + * should use not instrumented version of mem* functions. + */ +#define memcpy(dst, src, len) __memcpy(dst, src, len) +#define memmove(dst, src, len) __memmove(dst, src, len) +#define memset(s, c, n) __memset(s, c, n) + +#ifndef __NO_FORTIFY +#define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */ +#endif + +#endif + #ifdef CONFIG_PPC64 +#ifndef CONFIG_KASAN #define __HAVE_ARCH_MEMSET32 #define __HAVE_ARCH_MEMSET64 @@ -49,8 +72,11 @@ static inline void *memset64(uint64_t *p, uint64_t v, __kernel_size_t n) { return __memset64(p, v, n * 8); } +#endif #else +#ifndef CONFIG_KASAN #define __HAVE_ARCH_STRLEN +#endif extern void *memset16(uint16_t *, uint16_t, __kernel_size_t); #endif diff --git a/arch/powerpc/kernel/prom_init_check.sh b/arch/powerpc/kernel/prom_init_check.sh index 667df97d2595..181fd10008ef 100644 --- a/arch/powerpc/kernel/prom_init_check.sh +++ b/arch/powerpc/kernel/prom_init_check.sh @@ -16,8 +16,16 @@ # If you really need to reference something from prom_init.o add # it to the list below: +grep "^CONFIG_KASAN=y$" .config >/dev/null +if [ $? -eq 0 ] +then + MEM_FUNCS="__memcpy __memset" +else + MEM_FUNCS="memcpy memset" +fi + WHITELIST="add_reloc_offset __bss_start __bss_stop copy_and_flush -_end enter_prom memcpy memset reloc_offset __secondary_hold +_end enter_prom $MEM_FUNCS reloc_offset __secondary_hold __secondary_hold_acknowledge __secondary_hold_spinloop __start strcmp strcpy strlcpy strlen strncmp strstr kstrtobool logo_linux_clut224 reloc_got2 kernstart_addr memstart_addr linux_banner _stext diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index 79396e184bca..47a4de434c22 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile @@ -8,9 +8,14 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC) CFLAGS_REMOVE_code-patching.o = $(CC_FLAGS_FTRACE) CFLAGS_REMOVE_feature-fixups.o = $(CC_FLAGS_FTRACE) -obj-y += string.o alloc.o code-patching.o feature-fixups.o +obj-y += alloc.o code-patching.o feature-fixups.o -obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o strlen_32.o +ifndef CONFIG_KASAN +obj-y += string.o memcmp_$(BITS).o +obj-$(CONFIG_PPC32) += strlen_32.o +endif + +obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o obj-$(CONFIG_FUNCTION_ERROR_INJECTION) += error-inject.o @@ -34,7 +39,7 @@ obj64-$(CONFIG_KPROBES_SANITY_TEST) += test_emulate_step.o \ test_emulate_step_exec_instr.o obj-y += checksum_$(BITS).o checksum_wrappers.o \ - string_$(BITS).o memcmp_$(BITS).o + string_$(BITS).o obj-y += sstep.o ldstfp.o quad.o obj64-y += quad.o diff --git a/arch/powerpc/lib/copy_32.S b/arch/powerpc/lib/copy_32.S index ba66846fe973..d5642481fb98 100644 --- a/arch/powerpc/lib/copy_32.S +++ b/arch/powerpc/lib/copy_32.S @@ -14,6 +14,7 @@ #include <asm/ppc_asm.h> #include <asm/export.h> #include <asm/code-patching-asm.h> +#include <asm/kasan.h> #define COPY_16_BYTES \ lwz r7,4(r4); \ @@ -68,6 +69,7 @@ CACHELINE_BYTES = L1_CACHE_BYTES LG_CACHELINE_BYTES = L1_CACHE_SHIFT CACHELINE_MASK = (L1_CACHE_BYTES-1) +#ifndef CONFIG_KASAN _GLOBAL(memset16) rlwinm. r0 ,r5, 31, 1, 31 addi r6, r3, -4 @@ -81,6 +83,7 @@ _GLOBAL(memset16) sth r4, 4(r6) blr EXPORT_SYMBOL(memset16) +#endif /* * Use dcbz on the complete cache lines in the destination @@ -91,7 +94,7 @@ EXPORT_SYMBOL(memset16) * We therefore skip the optimised bloc that uses dcbz. This jump is * replaced by a nop once cache is active. This is done in machine_init() */ -_GLOBAL(memset) +_GLOBAL_KASAN(memset) cmplwi 0,r5,4 blt 7f @@ -151,6 +154,7 @@ _GLOBAL(memset) bdnz 9b blr EXPORT_SYMBOL(memset) +EXPORT_SYMBOL_KASAN(memset) /* * This version uses dcbz on the complete cache lines in the @@ -163,12 +167,12 @@ EXPORT_SYMBOL(memset) * We therefore jump to generic_memcpy which doesn't use dcbz. This jump is * replaced by a nop once cache is active. This is done in machine_init() */ -_GLOBAL(memmove) +_GLOBAL_KASAN(memmove) cmplw 0,r3,r4 bgt backwards_memcpy /* fall through */ -_GLOBAL(memcpy) +_GLOBAL_KASAN(memcpy) 1: b generic_memcpy patch_site 1b, patch__memcpy_nocache @@ -244,6 +248,8 @@ _GLOBAL(memcpy) 65: blr EXPORT_SYMBOL(memcpy) EXPORT_SYMBOL(memmove) +EXPORT_SYMBOL_KASAN(memcpy) +EXPORT_SYMBOL_KASAN(memmove) generic_memcpy: srwi. r7,r5,3 diff --git a/arch/powerpc/lib/mem_64.S b/arch/powerpc/lib/mem_64.S index 3c3be02f33b7..7f6bd031c306 100644 --- a/arch/powerpc/lib/mem_64.S +++ b/arch/powerpc/lib/mem_64.S @@ -12,7 +12,9 @@ #include <asm/errno.h> #include <asm/ppc_asm.h> #include <asm/export.h> +#include <asm/kasan.h> +#ifndef CONFIG_KASAN _GLOBAL(__memset16) rlwimi r4,r4,16,0,15 /* fall through */ @@ -29,8 +31,9 @@ _GLOBAL(__memset64) EXPORT_SYMBOL(__memset16) EXPORT_SYMBOL(__memset32) EXPORT_SYMBOL(__memset64) +#endif -_GLOBAL(memset) +_GLOBAL_KASAN(memset) neg r0,r3 rlwimi r4,r4,8,16,23 andi. r0,r0,7 /* # bytes to be 8-byte aligned */ @@ -96,8 +99,9 @@ _GLOBAL(memset) stb r4,0(r6) blr EXPORT_SYMBOL(memset) +EXPORT_SYMBOL_KASAN(memset) -_GLOBAL_TOC(memmove) +_GLOBAL_TOC_KASAN(memmove) cmplw 0,r3,r4 bgt backwards_memcpy b memcpy @@ -139,3 +143,4 @@ _GLOBAL(backwards_memcpy) mtctr r7 b 1b EXPORT_SYMBOL(memmove) +EXPORT_SYMBOL_KASAN(memmove) diff --git a/arch/powerpc/lib/memcpy_64.S b/arch/powerpc/lib/memcpy_64.S index 273ea67e60a1..25c3772c1dfb 100644 --- a/arch/powerpc/lib/memcpy_64.S +++ b/arch/powerpc/lib/memcpy_64.S @@ -11,6 +11,7 @@ #include <asm/export.h> #include <asm/asm-compat.h> #include <asm/feature-fixups.h> +#include <asm/kasan.h> #ifndef SELFTEST_CASE /* For big-endian, 0 == most CPUs, 1 == POWER6, 2 == Cell */ @@ -18,7 +19,7 @@ #endif .align 7 -_GLOBAL_TOC(memcpy) +_GLOBAL_TOC_KASAN(memcpy) BEGIN_FTR_SECTION #ifdef __LITTLE_ENDIAN__ cmpdi cr7,r5,0 @@ -230,3 +231,4 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) blr #endif EXPORT_SYMBOL(memcpy) +EXPORT_SYMBOL_KASAN(memcpy) > > It seems to be related to the export line, as if I swap the exports to > do fn before __##fn I get: > > WARNING: EXPORT symbol "memset" [vmlinux] version generation failed, symbol will not be versioned. > > I have narrowed this down to combining 2 EXPORT_SYMBOL()s on one line. > This works - no warning: > > EXPORT_SYMBOL(memset) > EXPORT_SYMBOL(__memset) > > This throws a warning: > > EXPORT_SYMBOL(memset) ; EXPORT_SYMBOL(__memset) > > I notice in looking at the diff of preprocessed source we end up > invoking an asm macro that doesn't seem to have a full final argument, I > wonder if that's relevant... > > -___EXPORT_SYMBOL __memset, __memset, ; ___EXPORT_SYMBOL memset, memset, > +___EXPORT_SYMBOL __memset, __memset, > +___EXPORT_SYMBOL memset, memset, > > I also notice that nowhere else in the source do people have multiple > EXPORT_SYMBOLs on the same line, and other arches seem to just > unconditionally export both symbols on multiple lines. > > I have no idea how this works for you - maybe it's affected by something 32bit. > > How would you feel about this approach instead? I'm not tied to any of > the names or anything. > > diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h > index e0637730a8e7..7b6a91b448dd 100644 > --- a/arch/powerpc/include/asm/ppc_asm.h > +++ b/arch/powerpc/include/asm/ppc_asm.h > @@ -214,6 +214,9 @@ name: \ > > #define DOTSYM(a) a > > +#define PROVIDE_WEAK_ALIAS(strongname, weakname) \ > + .weak weakname ; .set weakname, strongname ; > + > #else > > #define XGLUE(a,b) a##b > @@ -236,6 +239,10 @@ GLUE(.,name): > > #define DOTSYM(a) GLUE(.,a) > > +#define PROVIDE_WEAK_ALIAS(strongname, weakname) \ > + .weak weakname ; .set weakname, strongname ; \ > + .weak DOTSYM(weakname) ; .set DOTSYM(weakname), DOTSYM(strongname) ; > + > #endif > > #else /* 32-bit */ > @@ -251,6 +258,9 @@ GLUE(.,name): > > #define _GLOBAL_TOC(name) _GLOBAL(name) > > +#define PROVIDE_WEAK_ALIAS(strongname, weakname) \ > + .weak weakname ; .set weakname, strongname ; > + > #endif > > /* > --- a/arch/powerpc/lib/mem_64.S > +++ b/arch/powerpc/lib/mem_64.S > @@ -33,7 +33,8 @@ EXPORT_SYMBOL(__memset32) > EXPORT_SYMBOL(__memset64) > #endif > > -_GLOBAL_KASAN(memset) > +PROVIDE_WEAK_ALIAS(__memset,memset) > +_GLOBAL(__memset) > neg r0,r3 > rlwimi r4,r4,8,16,23 > andi. r0,r0,7 /* # bytes to be 8-byte aligned */ > @@ -98,9 +99,11 @@ _GLOBAL_KASAN(memset) > 10: bflr 31 > stb r4,0(r6) > blr > -EXPORT_SYMBOL_KASAN(memset) > +EXPORT_SYMBOL(memset) > +EXPORT_SYMBOL(__memset) > > -_GLOBAL_TOC_KASAN(memmove) > +PROVIDE_WEAK_ALIAS(__memmove,memove) > +_GLOBAL_TOC(__memmove) > cmplw 0,r3,r4 > bgt backwards_memcpy > b memcpy > @@ -141,4 +144,5 @@ _GLOBAL(backwards_memcpy) > beq 2b > mtctr r7 > b 1b > -EXPORT_SYMBOL_KASAN(memmove) > +EXPORT_SYMBOL(memmove) > +EXPORT_SYMBOL(__memmove) > diff --git a/arch/powerpc/lib/memcpy_64.S b/arch/powerpc/lib/memcpy_64.S > index 862b515b8868..7c1b09556cad 100644 > --- a/arch/powerpc/lib/memcpy_64.S > +++ b/arch/powerpc/lib/memcpy_64.S > @@ -19,7 +19,8 @@ > #endif > > .align 7 > -_GLOBAL_TOC_KASAN(memcpy) > +PROVIDE_WEAK_ALIAS(__memcpy,memcpy) > +_GLOBAL_TOC(__memcpy) > BEGIN_FTR_SECTION > #ifdef __LITTLE_ENDIAN__ > cmpdi cr7,r5,0 > @@ -230,4 +231,5 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) > 4: ld r3,-STACKFRAMESIZE+STK_REG(R31)(r1) /* return dest pointer */ > blr > #endif > -EXPORT_SYMBOL_KASAN(memcpy) > +EXPORT_SYMBOL(__memcpy) > +EXPORT_SYMBOL(memcpy) > > > Regards, > Daniel > > >> +#else >> +#define _GLOBAL_KASAN(fn) _GLOBAL(fn) >> +#define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(fn) >> +#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(fn) >> +#endif >> + >> +#endif >> diff --git a/arch/powerpc/include/asm/string.h b/arch/powerpc/include/asm/string.h >> index 1647de15a31e..9bf6dffb4090 100644 >> --- a/arch/powerpc/include/asm/string.h >> +++ b/arch/powerpc/include/asm/string.h >> @@ -4,14 +4,17 @@ >> >> #ifdef __KERNEL__ >> >> +#ifndef CONFIG_KASAN >> #define __HAVE_ARCH_STRNCPY >> #define __HAVE_ARCH_STRNCMP >> +#define __HAVE_ARCH_MEMCHR >> +#define __HAVE_ARCH_MEMCMP >> +#define __HAVE_ARCH_MEMSET16 >> +#endif >> + >> #define __HAVE_ARCH_MEMSET >> #define __HAVE_ARCH_MEMCPY >> #define __HAVE_ARCH_MEMMOVE >> -#define __HAVE_ARCH_MEMCMP >> -#define __HAVE_ARCH_MEMCHR >> -#define __HAVE_ARCH_MEMSET16 >> #define __HAVE_ARCH_MEMCPY_FLUSHCACHE >> >> extern char * strcpy(char *,const char *); >> @@ -27,7 +30,27 @@ extern int memcmp(const void *,const void *,__kernel_size_t); >> extern void * memchr(const void *,int,__kernel_size_t); >> extern void * memcpy_flushcache(void *,const void *,__kernel_size_t); >> >> +void *__memset(void *s, int c, __kernel_size_t count); >> +void *__memcpy(void *to, const void *from, __kernel_size_t n); >> +void *__memmove(void *to, const void *from, __kernel_size_t n); >> + >> +#if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__) >> +/* >> + * For files that are not instrumented (e.g. mm/slub.c) we >> + * should use not instrumented version of mem* functions. >> + */ >> +#define memcpy(dst, src, len) __memcpy(dst, src, len) >> +#define memmove(dst, src, len) __memmove(dst, src, len) >> +#define memset(s, c, n) __memset(s, c, n) >> + >> +#ifndef __NO_FORTIFY >> +#define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */ >> +#endif >> + >> +#endif >> + >> #ifdef CONFIG_PPC64 >> +#ifndef CONFIG_KASAN >> #define __HAVE_ARCH_MEMSET32 >> #define __HAVE_ARCH_MEMSET64 >> >> @@ -49,8 +72,11 @@ static inline void *memset64(uint64_t *p, uint64_t v, __kernel_size_t n) >> { >> return __memset64(p, v, n * 8); >> } >> +#endif >> #else >> +#ifndef CONFIG_KASAN >> #define __HAVE_ARCH_STRLEN >> +#endif >> >> extern void *memset16(uint16_t *, uint16_t, __kernel_size_t); >> #endif >> diff --git a/arch/powerpc/kernel/prom_init_check.sh b/arch/powerpc/kernel/prom_init_check.sh >> index 667df97d2595..181fd10008ef 100644 >> --- a/arch/powerpc/kernel/prom_init_check.sh >> +++ b/arch/powerpc/kernel/prom_init_check.sh >> @@ -16,8 +16,16 @@ >> # If you really need to reference something from prom_init.o add >> # it to the list below: >> >> +grep "^CONFIG_KASAN=y$" .config >/dev/null >> +if [ $? -eq 0 ] >> +then >> + MEM_FUNCS="__memcpy __memset" >> +else >> + MEM_FUNCS="memcpy memset" >> +fi >> + >> WHITELIST="add_reloc_offset __bss_start __bss_stop copy_and_flush >> -_end enter_prom memcpy memset reloc_offset __secondary_hold >> +_end enter_prom $MEM_FUNCS reloc_offset __secondary_hold >> __secondary_hold_acknowledge __secondary_hold_spinloop __start >> strcmp strcpy strlcpy strlen strncmp strstr kstrtobool logo_linux_clut224 >> reloc_got2 kernstart_addr memstart_addr linux_banner _stext >> diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile >> index 79396e184bca..47a4de434c22 100644 >> --- a/arch/powerpc/lib/Makefile >> +++ b/arch/powerpc/lib/Makefile >> @@ -8,9 +8,14 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC) >> CFLAGS_REMOVE_code-patching.o = $(CC_FLAGS_FTRACE) >> CFLAGS_REMOVE_feature-fixups.o = $(CC_FLAGS_FTRACE) >> >> -obj-y += string.o alloc.o code-patching.o feature-fixups.o >> +obj-y += alloc.o code-patching.o feature-fixups.o >> >> -obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o strlen_32.o >> +ifndef CONFIG_KASAN >> +obj-y += string.o memcmp_$(BITS).o >> +obj-$(CONFIG_PPC32) += strlen_32.o >> +endif >> + >> +obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o >> >> obj-$(CONFIG_FUNCTION_ERROR_INJECTION) += error-inject.o >> >> @@ -34,7 +39,7 @@ obj64-$(CONFIG_KPROBES_SANITY_TEST) += test_emulate_step.o \ >> test_emulate_step_exec_instr.o >> >> obj-y += checksum_$(BITS).o checksum_wrappers.o \ >> - string_$(BITS).o memcmp_$(BITS).o >> + string_$(BITS).o >> >> obj-y += sstep.o ldstfp.o quad.o >> obj64-y += quad.o >> diff --git a/arch/powerpc/lib/copy_32.S b/arch/powerpc/lib/copy_32.S >> index ba66846fe973..fc4fa7246200 100644 >> --- a/arch/powerpc/lib/copy_32.S >> +++ b/arch/powerpc/lib/copy_32.S >> @@ -14,6 +14,7 @@ >> #include <asm/ppc_asm.h> >> #include <asm/export.h> >> #include <asm/code-patching-asm.h> >> +#include <asm/kasan.h> >> >> #define COPY_16_BYTES \ >> lwz r7,4(r4); \ >> @@ -68,6 +69,7 @@ CACHELINE_BYTES = L1_CACHE_BYTES >> LG_CACHELINE_BYTES = L1_CACHE_SHIFT >> CACHELINE_MASK = (L1_CACHE_BYTES-1) >> >> +#ifndef CONFIG_KASAN >> _GLOBAL(memset16) >> rlwinm. r0 ,r5, 31, 1, 31 >> addi r6, r3, -4 >> @@ -81,6 +83,7 @@ _GLOBAL(memset16) >> sth r4, 4(r6) >> blr >> EXPORT_SYMBOL(memset16) >> +#endif >> >> /* >> * Use dcbz on the complete cache lines in the destination >> @@ -91,7 +94,7 @@ EXPORT_SYMBOL(memset16) >> * We therefore skip the optimised bloc that uses dcbz. This jump is >> * replaced by a nop once cache is active. This is done in machine_init() >> */ >> -_GLOBAL(memset) >> +_GLOBAL_KASAN(memset) >> cmplwi 0,r5,4 >> blt 7f >> >> @@ -150,7 +153,7 @@ _GLOBAL(memset) >> 9: stbu r4,1(r6) >> bdnz 9b >> blr >> -EXPORT_SYMBOL(memset) >> +EXPORT_SYMBOL_KASAN(memset) >> >> /* >> * This version uses dcbz on the complete cache lines in the >> @@ -163,12 +166,12 @@ EXPORT_SYMBOL(memset) >> * We therefore jump to generic_memcpy which doesn't use dcbz. This jump is >> * replaced by a nop once cache is active. This is done in machine_init() >> */ >> -_GLOBAL(memmove) >> +_GLOBAL_KASAN(memmove) >> cmplw 0,r3,r4 >> bgt backwards_memcpy >> /* fall through */ >> >> -_GLOBAL(memcpy) >> +_GLOBAL_KASAN(memcpy) >> 1: b generic_memcpy >> patch_site 1b, patch__memcpy_nocache >> >> @@ -242,8 +245,8 @@ _GLOBAL(memcpy) >> stbu r0,1(r6) >> bdnz 40b >> 65: blr >> -EXPORT_SYMBOL(memcpy) >> -EXPORT_SYMBOL(memmove) >> +EXPORT_SYMBOL_KASAN(memcpy) >> +EXPORT_SYMBOL_KASAN(memmove) >> >> generic_memcpy: >> srwi. r7,r5,3 >> diff --git a/arch/powerpc/lib/mem_64.S b/arch/powerpc/lib/mem_64.S >> index 3c3be02f33b7..7cd6cf6822a2 100644 >> --- a/arch/powerpc/lib/mem_64.S >> +++ b/arch/powerpc/lib/mem_64.S >> @@ -12,7 +12,9 @@ >> #include <asm/errno.h> >> #include <asm/ppc_asm.h> >> #include <asm/export.h> >> +#include <asm/kasan.h> >> >> +#ifndef CONFIG_KASAN >> _GLOBAL(__memset16) >> rlwimi r4,r4,16,0,15 >> /* fall through */ >> @@ -29,8 +31,9 @@ _GLOBAL(__memset64) >> EXPORT_SYMBOL(__memset16) >> EXPORT_SYMBOL(__memset32) >> EXPORT_SYMBOL(__memset64) >> +#endif >> >> -_GLOBAL(memset) >> +_GLOBAL_KASAN(memset) >> neg r0,r3 >> rlwimi r4,r4,8,16,23 >> andi. r0,r0,7 /* # bytes to be 8-byte aligned */ >> @@ -95,9 +98,9 @@ _GLOBAL(memset) >> 10: bflr 31 >> stb r4,0(r6) >> blr >> -EXPORT_SYMBOL(memset) >> +EXPORT_SYMBOL_KASAN(memset) >> >> -_GLOBAL_TOC(memmove) >> +_GLOBAL_TOC_KASAN(memmove) >> cmplw 0,r3,r4 >> bgt backwards_memcpy >> b memcpy >> @@ -138,4 +141,4 @@ _GLOBAL(backwards_memcpy) >> beq 2b >> mtctr r7 >> b 1b >> -EXPORT_SYMBOL(memmove) >> +EXPORT_SYMBOL_KASAN(memmove) >> diff --git a/arch/powerpc/lib/memcpy_64.S b/arch/powerpc/lib/memcpy_64.S >> index 273ea67e60a1..862b515b8868 100644 >> --- a/arch/powerpc/lib/memcpy_64.S >> +++ b/arch/powerpc/lib/memcpy_64.S >> @@ -11,6 +11,7 @@ >> #include <asm/export.h> >> #include <asm/asm-compat.h> >> #include <asm/feature-fixups.h> >> +#include <asm/kasan.h> >> >> #ifndef SELFTEST_CASE >> /* For big-endian, 0 == most CPUs, 1 == POWER6, 2 == Cell */ >> @@ -18,7 +19,7 @@ >> #endif >> >> .align 7 >> -_GLOBAL_TOC(memcpy) >> +_GLOBAL_TOC_KASAN(memcpy) >> BEGIN_FTR_SECTION >> #ifdef __LITTLE_ENDIAN__ >> cmpdi cr7,r5,0 >> @@ -229,4 +230,4 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) >> 4: ld r3,-STACKFRAMESIZE+STK_REG(R31)(r1) /* return dest pointer */ >> blr >> #endif >> -EXPORT_SYMBOL(memcpy) >> +EXPORT_SYMBOL_KASAN(memcpy) >> -- >> 2.13.3 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v9 02/11] powerpc: prepare string/mem functions for KASAN 2019-03-07 6:19 ` Christophe Leroy @ 2019-03-08 4:49 ` Daniel Axtens 0 siblings, 0 replies; 5+ messages in thread From: Daniel Axtens @ 2019-03-08 4:49 UTC (permalink / raw) To: Christophe Leroy, Benjamin Herrenschmidt, Paul Mackerras, Michael Ellerman, Nicholas Piggin, Aneesh Kumar K.V, Andrey Ryabinin, Alexander Potapenko, Dmitry Vyukov Cc: linux-kernel, linuxppc-dev, kasan-dev, linux-mm >>> +#ifdef CONFIG_KASAN >>> +#define _GLOBAL_KASAN(fn) .weak fn ; _GLOBAL(__##fn) ; _GLOBAL(fn) >>> +#define _GLOBAL_TOC_KASAN(fn) .weak fn ; _GLOBAL_TOC(__##fn) ; _GLOBAL_TOC(fn) >>> +#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(__##fn) ; EXPORT_SYMBOL(fn) >> >> I'm having some trouble with this. I get warnings like this: >> >> WARNING: EXPORT symbol "__memcpy" [vmlinux] version generation failed, symbol will not be versioned. > > I don't have this problem, neither with my PPC32 defconfigs nor with > ppc64e_defconfig - SPARSEMEM_VMEMMAP + KASAN > Using GCC 8.1 > > I've been looking into it in more details and can't understand the need > for a weak symbol. A weak symbol is to allow it's optional replacement > by other code. But here KASAN replaces it inconditionally, so I see no > point for a weak symbol here. If you don't make it weak, and kasan and arch code will export it as a regular symbol, and you will end up with a clash like this: powerpc64-linux-gnu-ld: mm/kasan/common.o: in function `.memset': (.text+0x210): multiple definition of `.memset'; arch/powerpc/lib/mem_64.o:(.text+0x0): first defined here powerpc64-linux-gnu-ld: mm/kasan/common.o:(.opd+0x78): multiple definition of `memset'; arch/powerpc/lib/mem_64.o:(.opd+0x0): first defined here But your patch doesn't do that, so don't worry :) > Regarding the export of the functions, I believe that when the functions > are defined in KASAN, they should be exported by KASAN and not by the > arch. But such a change is out of scope for now. So lets have a double > export for now, one day we will drop it. > > Regarding export of __memcpy() etc..., there is at least the LKDTM > module which inhibits KASAN, so it really needs to be exported. > > What about the patch below ? Yes, that works for me. After de-mangling it I have used it to replace your patch 2 v9. Thanks for bearing with me. Regards, Daniel > > Christophe > > diff --git a/arch/powerpc/include/asm/kasan.h > b/arch/powerpc/include/asm/kasan.h > new file mode 100644 > index 000000000000..2c179a39d4ba > --- /dev/null > +++ b/arch/powerpc/include/asm/kasan.h > @@ -0,0 +1,15 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef __ASM_KASAN_H > +#define __ASM_KASAN_H > + > +#ifdef CONFIG_KASAN > +#define _GLOBAL_KASAN(fn) _GLOBAL(__##fn) > +#define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(__##fn) > +#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(__##fn) > +#else > +#define _GLOBAL_KASAN(fn) _GLOBAL(fn) > +#define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(fn) > +#define EXPORT_SYMBOL_KASAN(fn) > +#endif > + > +#endif > diff --git a/arch/powerpc/include/asm/string.h > b/arch/powerpc/include/asm/string.h > index 1647de15a31e..9bf6dffb4090 100644 > --- a/arch/powerpc/include/asm/string.h > +++ b/arch/powerpc/include/asm/string.h > @@ -4,14 +4,17 @@ > > #ifdef __KERNEL__ > > +#ifndef CONFIG_KASAN > #define __HAVE_ARCH_STRNCPY > #define __HAVE_ARCH_STRNCMP > +#define __HAVE_ARCH_MEMCHR > +#define __HAVE_ARCH_MEMCMP > +#define __HAVE_ARCH_MEMSET16 > +#endif > + > #define __HAVE_ARCH_MEMSET > #define __HAVE_ARCH_MEMCPY > #define __HAVE_ARCH_MEMMOVE > -#define __HAVE_ARCH_MEMCMP > -#define __HAVE_ARCH_MEMCHR > -#define __HAVE_ARCH_MEMSET16 > #define __HAVE_ARCH_MEMCPY_FLUSHCACHE > > extern char * strcpy(char *,const char *); > @@ -27,7 +30,27 @@ extern int memcmp(const void *,const void > *,__kernel_size_t); > extern void * memchr(const void *,int,__kernel_size_t); > extern void * memcpy_flushcache(void *,const void *,__kernel_size_t); > > +void *__memset(void *s, int c, __kernel_size_t count); > +void *__memcpy(void *to, const void *from, __kernel_size_t n); > +void *__memmove(void *to, const void *from, __kernel_size_t n); > + > +#if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__) > +/* > + * For files that are not instrumented (e.g. mm/slub.c) we > + * should use not instrumented version of mem* functions. > + */ > +#define memcpy(dst, src, len) __memcpy(dst, src, len) > +#define memmove(dst, src, len) __memmove(dst, src, len) > +#define memset(s, c, n) __memset(s, c, n) > + > +#ifndef __NO_FORTIFY > +#define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */ > +#endif > + > +#endif > + > #ifdef CONFIG_PPC64 > +#ifndef CONFIG_KASAN > #define __HAVE_ARCH_MEMSET32 > #define __HAVE_ARCH_MEMSET64 > > @@ -49,8 +72,11 @@ static inline void *memset64(uint64_t *p, uint64_t v, > __kernel_size_t n) > { > return __memset64(p, v, n * 8); > } > +#endif > #else > +#ifndef CONFIG_KASAN > #define __HAVE_ARCH_STRLEN > +#endif > > extern void *memset16(uint16_t *, uint16_t, __kernel_size_t); > #endif > diff --git a/arch/powerpc/kernel/prom_init_check.sh > b/arch/powerpc/kernel/prom_init_check.sh > index 667df97d2595..181fd10008ef 100644 > --- a/arch/powerpc/kernel/prom_init_check.sh > +++ b/arch/powerpc/kernel/prom_init_check.sh > @@ -16,8 +16,16 @@ > # If you really need to reference something from prom_init.o add > # it to the list below: > > +grep "^CONFIG_KASAN=y$" .config >/dev/null > +if [ $? -eq 0 ] > +then > + MEM_FUNCS="__memcpy __memset" > +else > + MEM_FUNCS="memcpy memset" > +fi > + > WHITELIST="add_reloc_offset __bss_start __bss_stop copy_and_flush > -_end enter_prom memcpy memset reloc_offset __secondary_hold > +_end enter_prom $MEM_FUNCS reloc_offset __secondary_hold > __secondary_hold_acknowledge __secondary_hold_spinloop __start > strcmp strcpy strlcpy strlen strncmp strstr kstrtobool logo_linux_clut224 > reloc_got2 kernstart_addr memstart_addr linux_banner _stext > diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile > index 79396e184bca..47a4de434c22 100644 > --- a/arch/powerpc/lib/Makefile > +++ b/arch/powerpc/lib/Makefile > @@ -8,9 +8,14 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC) > CFLAGS_REMOVE_code-patching.o = $(CC_FLAGS_FTRACE) > CFLAGS_REMOVE_feature-fixups.o = $(CC_FLAGS_FTRACE) > > -obj-y += string.o alloc.o code-patching.o feature-fixups.o > +obj-y += alloc.o code-patching.o feature-fixups.o > > -obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o strlen_32.o > +ifndef CONFIG_KASAN > +obj-y += string.o memcmp_$(BITS).o > +obj-$(CONFIG_PPC32) += strlen_32.o > +endif > + > +obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o > > obj-$(CONFIG_FUNCTION_ERROR_INJECTION) += error-inject.o > > @@ -34,7 +39,7 @@ obj64-$(CONFIG_KPROBES_SANITY_TEST) += > test_emulate_step.o \ > test_emulate_step_exec_instr.o > > obj-y += checksum_$(BITS).o checksum_wrappers.o \ > - string_$(BITS).o memcmp_$(BITS).o > + string_$(BITS).o > > obj-y += sstep.o ldstfp.o quad.o > obj64-y += quad.o > diff --git a/arch/powerpc/lib/copy_32.S b/arch/powerpc/lib/copy_32.S > index ba66846fe973..d5642481fb98 100644 > --- a/arch/powerpc/lib/copy_32.S > +++ b/arch/powerpc/lib/copy_32.S > @@ -14,6 +14,7 @@ > #include <asm/ppc_asm.h> > #include <asm/export.h> > #include <asm/code-patching-asm.h> > +#include <asm/kasan.h> > > #define COPY_16_BYTES \ > lwz r7,4(r4); \ > @@ -68,6 +69,7 @@ CACHELINE_BYTES = L1_CACHE_BYTES > LG_CACHELINE_BYTES = L1_CACHE_SHIFT > CACHELINE_MASK = (L1_CACHE_BYTES-1) > > +#ifndef CONFIG_KASAN > _GLOBAL(memset16) > rlwinm. r0 ,r5, 31, 1, 31 > addi r6, r3, -4 > @@ -81,6 +83,7 @@ _GLOBAL(memset16) > sth r4, 4(r6) > blr > EXPORT_SYMBOL(memset16) > +#endif > > /* > * Use dcbz on the complete cache lines in the destination > @@ -91,7 +94,7 @@ EXPORT_SYMBOL(memset16) > * We therefore skip the optimised bloc that uses dcbz. This jump is > * replaced by a nop once cache is active. This is done in machine_init() > */ > -_GLOBAL(memset) > +_GLOBAL_KASAN(memset) > cmplwi 0,r5,4 > blt 7f > > @@ -151,6 +154,7 @@ _GLOBAL(memset) > bdnz 9b > blr > EXPORT_SYMBOL(memset) > +EXPORT_SYMBOL_KASAN(memset) > > /* > * This version uses dcbz on the complete cache lines in the > @@ -163,12 +167,12 @@ EXPORT_SYMBOL(memset) > * We therefore jump to generic_memcpy which doesn't use dcbz. This > jump is > * replaced by a nop once cache is active. This is done in machine_init() > */ > -_GLOBAL(memmove) > +_GLOBAL_KASAN(memmove) > cmplw 0,r3,r4 > bgt backwards_memcpy > /* fall through */ > > -_GLOBAL(memcpy) > +_GLOBAL_KASAN(memcpy) > 1: b generic_memcpy > patch_site 1b, patch__memcpy_nocache > > @@ -244,6 +248,8 @@ _GLOBAL(memcpy) > 65: blr > EXPORT_SYMBOL(memcpy) > EXPORT_SYMBOL(memmove) > +EXPORT_SYMBOL_KASAN(memcpy) > +EXPORT_SYMBOL_KASAN(memmove) > > generic_memcpy: > srwi. r7,r5,3 > diff --git a/arch/powerpc/lib/mem_64.S b/arch/powerpc/lib/mem_64.S > index 3c3be02f33b7..7f6bd031c306 100644 > --- a/arch/powerpc/lib/mem_64.S > +++ b/arch/powerpc/lib/mem_64.S > @@ -12,7 +12,9 @@ > #include <asm/errno.h> > #include <asm/ppc_asm.h> > #include <asm/export.h> > +#include <asm/kasan.h> > > +#ifndef CONFIG_KASAN > _GLOBAL(__memset16) > rlwimi r4,r4,16,0,15 > /* fall through */ > @@ -29,8 +31,9 @@ _GLOBAL(__memset64) > EXPORT_SYMBOL(__memset16) > EXPORT_SYMBOL(__memset32) > EXPORT_SYMBOL(__memset64) > +#endif > > -_GLOBAL(memset) > +_GLOBAL_KASAN(memset) > neg r0,r3 > rlwimi r4,r4,8,16,23 > andi. r0,r0,7 /* # bytes to be 8-byte aligned */ > @@ -96,8 +99,9 @@ _GLOBAL(memset) > stb r4,0(r6) > blr > EXPORT_SYMBOL(memset) > +EXPORT_SYMBOL_KASAN(memset) > > -_GLOBAL_TOC(memmove) > +_GLOBAL_TOC_KASAN(memmove) > cmplw 0,r3,r4 > bgt backwards_memcpy > b memcpy > @@ -139,3 +143,4 @@ _GLOBAL(backwards_memcpy) > mtctr r7 > b 1b > EXPORT_SYMBOL(memmove) > +EXPORT_SYMBOL_KASAN(memmove) > diff --git a/arch/powerpc/lib/memcpy_64.S b/arch/powerpc/lib/memcpy_64.S > index 273ea67e60a1..25c3772c1dfb 100644 > --- a/arch/powerpc/lib/memcpy_64.S > +++ b/arch/powerpc/lib/memcpy_64.S > @@ -11,6 +11,7 @@ > #include <asm/export.h> > #include <asm/asm-compat.h> > #include <asm/feature-fixups.h> > +#include <asm/kasan.h> > > #ifndef SELFTEST_CASE > /* For big-endian, 0 == most CPUs, 1 == POWER6, 2 == Cell */ > @@ -18,7 +19,7 @@ > #endif > > .align 7 > -_GLOBAL_TOC(memcpy) > +_GLOBAL_TOC_KASAN(memcpy) > BEGIN_FTR_SECTION > #ifdef __LITTLE_ENDIAN__ > cmpdi cr7,r5,0 > @@ -230,3 +231,4 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) > blr > #endif > EXPORT_SYMBOL(memcpy) > +EXPORT_SYMBOL_KASAN(memcpy) > > >> >> It seems to be related to the export line, as if I swap the exports to >> do fn before __##fn I get: >> >> WARNING: EXPORT symbol "memset" [vmlinux] version generation failed, symbol will not be versioned. >> >> I have narrowed this down to combining 2 EXPORT_SYMBOL()s on one line. >> This works - no warning: >> >> EXPORT_SYMBOL(memset) >> EXPORT_SYMBOL(__memset) >> >> This throws a warning: >> >> EXPORT_SYMBOL(memset) ; EXPORT_SYMBOL(__memset) >> >> I notice in looking at the diff of preprocessed source we end up >> invoking an asm macro that doesn't seem to have a full final argument, I >> wonder if that's relevant... >> >> -___EXPORT_SYMBOL __memset, __memset, ; ___EXPORT_SYMBOL memset, memset, >> +___EXPORT_SYMBOL __memset, __memset, >> +___EXPORT_SYMBOL memset, memset, >> >> I also notice that nowhere else in the source do people have multiple >> EXPORT_SYMBOLs on the same line, and other arches seem to just >> unconditionally export both symbols on multiple lines. >> >> I have no idea how this works for you - maybe it's affected by something 32bit. >> >> How would you feel about this approach instead? I'm not tied to any of >> the names or anything. >> >> diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h >> index e0637730a8e7..7b6a91b448dd 100644 >> --- a/arch/powerpc/include/asm/ppc_asm.h >> +++ b/arch/powerpc/include/asm/ppc_asm.h >> @@ -214,6 +214,9 @@ name: \ >> >> #define DOTSYM(a) a >> >> +#define PROVIDE_WEAK_ALIAS(strongname, weakname) \ >> + .weak weakname ; .set weakname, strongname ; >> + >> #else >> >> #define XGLUE(a,b) a##b >> @@ -236,6 +239,10 @@ GLUE(.,name): >> >> #define DOTSYM(a) GLUE(.,a) >> >> +#define PROVIDE_WEAK_ALIAS(strongname, weakname) \ >> + .weak weakname ; .set weakname, strongname ; \ >> + .weak DOTSYM(weakname) ; .set DOTSYM(weakname), DOTSYM(strongname) ; >> + >> #endif >> >> #else /* 32-bit */ >> @@ -251,6 +258,9 @@ GLUE(.,name): >> >> #define _GLOBAL_TOC(name) _GLOBAL(name) >> >> +#define PROVIDE_WEAK_ALIAS(strongname, weakname) \ >> + .weak weakname ; .set weakname, strongname ; >> + >> #endif >> >> /* >> --- a/arch/powerpc/lib/mem_64.S >> +++ b/arch/powerpc/lib/mem_64.S >> @@ -33,7 +33,8 @@ EXPORT_SYMBOL(__memset32) >> EXPORT_SYMBOL(__memset64) >> #endif >> >> -_GLOBAL_KASAN(memset) >> +PROVIDE_WEAK_ALIAS(__memset,memset) >> +_GLOBAL(__memset) >> neg r0,r3 >> rlwimi r4,r4,8,16,23 >> andi. r0,r0,7 /* # bytes to be 8-byte aligned */ >> @@ -98,9 +99,11 @@ _GLOBAL_KASAN(memset) >> 10: bflr 31 >> stb r4,0(r6) >> blr >> -EXPORT_SYMBOL_KASAN(memset) >> +EXPORT_SYMBOL(memset) >> +EXPORT_SYMBOL(__memset) >> >> -_GLOBAL_TOC_KASAN(memmove) >> +PROVIDE_WEAK_ALIAS(__memmove,memove) >> +_GLOBAL_TOC(__memmove) >> cmplw 0,r3,r4 >> bgt backwards_memcpy >> b memcpy >> @@ -141,4 +144,5 @@ _GLOBAL(backwards_memcpy) >> beq 2b >> mtctr r7 >> b 1b >> -EXPORT_SYMBOL_KASAN(memmove) >> +EXPORT_SYMBOL(memmove) >> +EXPORT_SYMBOL(__memmove) >> diff --git a/arch/powerpc/lib/memcpy_64.S b/arch/powerpc/lib/memcpy_64.S >> index 862b515b8868..7c1b09556cad 100644 >> --- a/arch/powerpc/lib/memcpy_64.S >> +++ b/arch/powerpc/lib/memcpy_64.S >> @@ -19,7 +19,8 @@ >> #endif >> >> .align 7 >> -_GLOBAL_TOC_KASAN(memcpy) >> +PROVIDE_WEAK_ALIAS(__memcpy,memcpy) >> +_GLOBAL_TOC(__memcpy) >> BEGIN_FTR_SECTION >> #ifdef __LITTLE_ENDIAN__ >> cmpdi cr7,r5,0 >> @@ -230,4 +231,5 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) >> 4: ld r3,-STACKFRAMESIZE+STK_REG(R31)(r1) /* return dest pointer */ >> blr >> #endif >> -EXPORT_SYMBOL_KASAN(memcpy) >> +EXPORT_SYMBOL(__memcpy) >> +EXPORT_SYMBOL(memcpy) >> >> >> Regards, >> Daniel >> >> >>> +#else >>> +#define _GLOBAL_KASAN(fn) _GLOBAL(fn) >>> +#define _GLOBAL_TOC_KASAN(fn) _GLOBAL_TOC(fn) >>> +#define EXPORT_SYMBOL_KASAN(fn) EXPORT_SYMBOL(fn) >>> +#endif >>> + >>> +#endif >>> diff --git a/arch/powerpc/include/asm/string.h b/arch/powerpc/include/asm/string.h >>> index 1647de15a31e..9bf6dffb4090 100644 >>> --- a/arch/powerpc/include/asm/string.h >>> +++ b/arch/powerpc/include/asm/string.h >>> @@ -4,14 +4,17 @@ >>> >>> #ifdef __KERNEL__ >>> >>> +#ifndef CONFIG_KASAN >>> #define __HAVE_ARCH_STRNCPY >>> #define __HAVE_ARCH_STRNCMP >>> +#define __HAVE_ARCH_MEMCHR >>> +#define __HAVE_ARCH_MEMCMP >>> +#define __HAVE_ARCH_MEMSET16 >>> +#endif >>> + >>> #define __HAVE_ARCH_MEMSET >>> #define __HAVE_ARCH_MEMCPY >>> #define __HAVE_ARCH_MEMMOVE >>> -#define __HAVE_ARCH_MEMCMP >>> -#define __HAVE_ARCH_MEMCHR >>> -#define __HAVE_ARCH_MEMSET16 >>> #define __HAVE_ARCH_MEMCPY_FLUSHCACHE >>> >>> extern char * strcpy(char *,const char *); >>> @@ -27,7 +30,27 @@ extern int memcmp(const void *,const void *,__kernel_size_t); >>> extern void * memchr(const void *,int,__kernel_size_t); >>> extern void * memcpy_flushcache(void *,const void *,__kernel_size_t); >>> >>> +void *__memset(void *s, int c, __kernel_size_t count); >>> +void *__memcpy(void *to, const void *from, __kernel_size_t n); >>> +void *__memmove(void *to, const void *from, __kernel_size_t n); >>> + >>> +#if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__) >>> +/* >>> + * For files that are not instrumented (e.g. mm/slub.c) we >>> + * should use not instrumented version of mem* functions. >>> + */ >>> +#define memcpy(dst, src, len) __memcpy(dst, src, len) >>> +#define memmove(dst, src, len) __memmove(dst, src, len) >>> +#define memset(s, c, n) __memset(s, c, n) >>> + >>> +#ifndef __NO_FORTIFY >>> +#define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */ >>> +#endif >>> + >>> +#endif >>> + >>> #ifdef CONFIG_PPC64 >>> +#ifndef CONFIG_KASAN >>> #define __HAVE_ARCH_MEMSET32 >>> #define __HAVE_ARCH_MEMSET64 >>> >>> @@ -49,8 +72,11 @@ static inline void *memset64(uint64_t *p, uint64_t v, __kernel_size_t n) >>> { >>> return __memset64(p, v, n * 8); >>> } >>> +#endif >>> #else >>> +#ifndef CONFIG_KASAN >>> #define __HAVE_ARCH_STRLEN >>> +#endif >>> >>> extern void *memset16(uint16_t *, uint16_t, __kernel_size_t); >>> #endif >>> diff --git a/arch/powerpc/kernel/prom_init_check.sh b/arch/powerpc/kernel/prom_init_check.sh >>> index 667df97d2595..181fd10008ef 100644 >>> --- a/arch/powerpc/kernel/prom_init_check.sh >>> +++ b/arch/powerpc/kernel/prom_init_check.sh >>> @@ -16,8 +16,16 @@ >>> # If you really need to reference something from prom_init.o add >>> # it to the list below: >>> >>> +grep "^CONFIG_KASAN=y$" .config >/dev/null >>> +if [ $? -eq 0 ] >>> +then >>> + MEM_FUNCS="__memcpy __memset" >>> +else >>> + MEM_FUNCS="memcpy memset" >>> +fi >>> + >>> WHITELIST="add_reloc_offset __bss_start __bss_stop copy_and_flush >>> -_end enter_prom memcpy memset reloc_offset __secondary_hold >>> +_end enter_prom $MEM_FUNCS reloc_offset __secondary_hold >>> __secondary_hold_acknowledge __secondary_hold_spinloop __start >>> strcmp strcpy strlcpy strlen strncmp strstr kstrtobool logo_linux_clut224 >>> reloc_got2 kernstart_addr memstart_addr linux_banner _stext >>> diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile >>> index 79396e184bca..47a4de434c22 100644 >>> --- a/arch/powerpc/lib/Makefile >>> +++ b/arch/powerpc/lib/Makefile >>> @@ -8,9 +8,14 @@ ccflags-$(CONFIG_PPC64) := $(NO_MINIMAL_TOC) >>> CFLAGS_REMOVE_code-patching.o = $(CC_FLAGS_FTRACE) >>> CFLAGS_REMOVE_feature-fixups.o = $(CC_FLAGS_FTRACE) >>> >>> -obj-y += string.o alloc.o code-patching.o feature-fixups.o >>> +obj-y += alloc.o code-patching.o feature-fixups.o >>> >>> -obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o strlen_32.o >>> +ifndef CONFIG_KASAN >>> +obj-y += string.o memcmp_$(BITS).o >>> +obj-$(CONFIG_PPC32) += strlen_32.o >>> +endif >>> + >>> +obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o >>> >>> obj-$(CONFIG_FUNCTION_ERROR_INJECTION) += error-inject.o >>> >>> @@ -34,7 +39,7 @@ obj64-$(CONFIG_KPROBES_SANITY_TEST) += test_emulate_step.o \ >>> test_emulate_step_exec_instr.o >>> >>> obj-y += checksum_$(BITS).o checksum_wrappers.o \ >>> - string_$(BITS).o memcmp_$(BITS).o >>> + string_$(BITS).o >>> >>> obj-y += sstep.o ldstfp.o quad.o >>> obj64-y += quad.o >>> diff --git a/arch/powerpc/lib/copy_32.S b/arch/powerpc/lib/copy_32.S >>> index ba66846fe973..fc4fa7246200 100644 >>> --- a/arch/powerpc/lib/copy_32.S >>> +++ b/arch/powerpc/lib/copy_32.S >>> @@ -14,6 +14,7 @@ >>> #include <asm/ppc_asm.h> >>> #include <asm/export.h> >>> #include <asm/code-patching-asm.h> >>> +#include <asm/kasan.h> >>> >>> #define COPY_16_BYTES \ >>> lwz r7,4(r4); \ >>> @@ -68,6 +69,7 @@ CACHELINE_BYTES = L1_CACHE_BYTES >>> LG_CACHELINE_BYTES = L1_CACHE_SHIFT >>> CACHELINE_MASK = (L1_CACHE_BYTES-1) >>> >>> +#ifndef CONFIG_KASAN >>> _GLOBAL(memset16) >>> rlwinm. r0 ,r5, 31, 1, 31 >>> addi r6, r3, -4 >>> @@ -81,6 +83,7 @@ _GLOBAL(memset16) >>> sth r4, 4(r6) >>> blr >>> EXPORT_SYMBOL(memset16) >>> +#endif >>> >>> /* >>> * Use dcbz on the complete cache lines in the destination >>> @@ -91,7 +94,7 @@ EXPORT_SYMBOL(memset16) >>> * We therefore skip the optimised bloc that uses dcbz. This jump is >>> * replaced by a nop once cache is active. This is done in machine_init() >>> */ >>> -_GLOBAL(memset) >>> +_GLOBAL_KASAN(memset) >>> cmplwi 0,r5,4 >>> blt 7f >>> >>> @@ -150,7 +153,7 @@ _GLOBAL(memset) >>> 9: stbu r4,1(r6) >>> bdnz 9b >>> blr >>> -EXPORT_SYMBOL(memset) >>> +EXPORT_SYMBOL_KASAN(memset) >>> >>> /* >>> * This version uses dcbz on the complete cache lines in the >>> @@ -163,12 +166,12 @@ EXPORT_SYMBOL(memset) >>> * We therefore jump to generic_memcpy which doesn't use dcbz. This jump is >>> * replaced by a nop once cache is active. This is done in machine_init() >>> */ >>> -_GLOBAL(memmove) >>> +_GLOBAL_KASAN(memmove) >>> cmplw 0,r3,r4 >>> bgt backwards_memcpy >>> /* fall through */ >>> >>> -_GLOBAL(memcpy) >>> +_GLOBAL_KASAN(memcpy) >>> 1: b generic_memcpy >>> patch_site 1b, patch__memcpy_nocache >>> >>> @@ -242,8 +245,8 @@ _GLOBAL(memcpy) >>> stbu r0,1(r6) >>> bdnz 40b >>> 65: blr >>> -EXPORT_SYMBOL(memcpy) >>> -EXPORT_SYMBOL(memmove) >>> +EXPORT_SYMBOL_KASAN(memcpy) >>> +EXPORT_SYMBOL_KASAN(memmove) >>> >>> generic_memcpy: >>> srwi. r7,r5,3 >>> diff --git a/arch/powerpc/lib/mem_64.S b/arch/powerpc/lib/mem_64.S >>> index 3c3be02f33b7..7cd6cf6822a2 100644 >>> --- a/arch/powerpc/lib/mem_64.S >>> +++ b/arch/powerpc/lib/mem_64.S >>> @@ -12,7 +12,9 @@ >>> #include <asm/errno.h> >>> #include <asm/ppc_asm.h> >>> #include <asm/export.h> >>> +#include <asm/kasan.h> >>> >>> +#ifndef CONFIG_KASAN >>> _GLOBAL(__memset16) >>> rlwimi r4,r4,16,0,15 >>> /* fall through */ >>> @@ -29,8 +31,9 @@ _GLOBAL(__memset64) >>> EXPORT_SYMBOL(__memset16) >>> EXPORT_SYMBOL(__memset32) >>> EXPORT_SYMBOL(__memset64) >>> +#endif >>> >>> -_GLOBAL(memset) >>> +_GLOBAL_KASAN(memset) >>> neg r0,r3 >>> rlwimi r4,r4,8,16,23 >>> andi. r0,r0,7 /* # bytes to be 8-byte aligned */ >>> @@ -95,9 +98,9 @@ _GLOBAL(memset) >>> 10: bflr 31 >>> stb r4,0(r6) >>> blr >>> -EXPORT_SYMBOL(memset) >>> +EXPORT_SYMBOL_KASAN(memset) >>> >>> -_GLOBAL_TOC(memmove) >>> +_GLOBAL_TOC_KASAN(memmove) >>> cmplw 0,r3,r4 >>> bgt backwards_memcpy >>> b memcpy >>> @@ -138,4 +141,4 @@ _GLOBAL(backwards_memcpy) >>> beq 2b >>> mtctr r7 >>> b 1b >>> -EXPORT_SYMBOL(memmove) >>> +EXPORT_SYMBOL_KASAN(memmove) >>> diff --git a/arch/powerpc/lib/memcpy_64.S b/arch/powerpc/lib/memcpy_64.S >>> index 273ea67e60a1..862b515b8868 100644 >>> --- a/arch/powerpc/lib/memcpy_64.S >>> +++ b/arch/powerpc/lib/memcpy_64.S >>> @@ -11,6 +11,7 @@ >>> #include <asm/export.h> >>> #include <asm/asm-compat.h> >>> #include <asm/feature-fixups.h> >>> +#include <asm/kasan.h> >>> >>> #ifndef SELFTEST_CASE >>> /* For big-endian, 0 == most CPUs, 1 == POWER6, 2 == Cell */ >>> @@ -18,7 +19,7 @@ >>> #endif >>> >>> .align 7 >>> -_GLOBAL_TOC(memcpy) >>> +_GLOBAL_TOC_KASAN(memcpy) >>> BEGIN_FTR_SECTION >>> #ifdef __LITTLE_ENDIAN__ >>> cmpdi cr7,r5,0 >>> @@ -229,4 +230,4 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) >>> 4: ld r3,-STACKFRAMESIZE+STK_REG(R31)(r1) /* return dest pointer */ >>> blr >>> #endif >>> -EXPORT_SYMBOL(memcpy) >>> +EXPORT_SYMBOL_KASAN(memcpy) >>> -- >>> 2.13.3 ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-03-08 4:50 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <cover.1551443452.git.christophe.leroy@c-s.fr>
[not found] ` <45fb252fc1b27f2804109fa35ba2882ae29e6035.1551443453.git.christophe.leroy@c-s.fr>
2019-03-04 5:26 ` [PATCH v9 02/11] powerpc: prepare string/mem functions for KASAN Daniel Axtens
2019-03-06 21:54 ` Christophe Leroy
2019-03-08 3:44 ` Daniel Axtens
2019-03-07 6:19 ` Christophe Leroy
2019-03-08 4:49 ` Daniel Axtens
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
Powered by JetHome