uaccess: add infrastructure for kernel builds with set_fs()
authorChristoph Hellwig <hch@lst.de>
Thu, 3 Sep 2020 14:22:35 +0000 (16:22 +0200)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 9 Sep 2020 02:21:32 +0000 (22:21 -0400)
Add a CONFIG_SET_FS option that is selected by architecturess that
implement set_fs, which is all of them initially.  If the option is not
set stubs for routines related to overriding the address space are
provided so that architectures can start to opt out of providing set_fs.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
26 files changed:
arch/Kconfig
arch/alpha/Kconfig
arch/arc/Kconfig
arch/arm/Kconfig
arch/arm64/Kconfig
arch/c6x/Kconfig
arch/csky/Kconfig
arch/h8300/Kconfig
arch/hexagon/Kconfig
arch/ia64/Kconfig
arch/m68k/Kconfig
arch/microblaze/Kconfig
arch/mips/Kconfig
arch/nds32/Kconfig
arch/nios2/Kconfig
arch/openrisc/Kconfig
arch/parisc/Kconfig
arch/powerpc/Kconfig
arch/riscv/Kconfig
arch/s390/Kconfig
arch/sh/Kconfig
arch/sparc/Kconfig
arch/um/Kconfig
arch/x86/Kconfig
arch/xtensa/Kconfig
include/linux/uaccess.h

index af14a56..3fab619 100644 (file)
@@ -24,6 +24,9 @@ config KEXEC_ELF
 config HAVE_IMA_KEXEC
        bool
 
+config SET_FS
+       bool
+
 config HOTPLUG_SMT
        bool
 
index 9c5f06e..d6e9fc7 100644 (file)
@@ -39,6 +39,7 @@ config ALPHA
        select OLD_SIGSUSPEND
        select CPU_NO_EFFICIENT_FFS if !ALPHA_EV67
        select MMU_GATHER_NO_RANGE
+       select SET_FS
        help
          The Alpha is a 64-bit general-purpose processor designed and
          marketed by the Digital Equipment Corporation of blessed memory,
index ba00c4e..c49f575 100644 (file)
@@ -48,6 +48,7 @@ config ARC
        select PCI_SYSCALL if PCI
        select PERF_USE_VMALLOC if ARC_CACHE_VIPT_ALIASING
        select HAVE_ARCH_JUMP_LABEL if ISA_ARCV2 && !CPU_ENDIAN_BE32
+       select SET_FS
 
 config ARCH_HAS_CACHE_LINE_SIZE
        def_bool y
index e00d94b..87e1478 100644 (file)
@@ -118,6 +118,7 @@ config ARM
        select PCI_SYSCALL if PCI
        select PERF_USE_VMALLOC
        select RTC_LIB
+       select SET_FS
        select SYS_SUPPORTS_APM_EMULATION
        # Above selects are sorted alphabetically; please add new ones
        # according to that.  Thanks.
index 6d23283..fbd9e35 100644 (file)
@@ -192,6 +192,7 @@ config ARM64
        select PCI_SYSCALL if PCI
        select POWER_RESET
        select POWER_SUPPLY
+       select SET_FS
        select SPARSE_IRQ
        select SWIOTLB
        select SYSCTL_EXCEPTION_TRACE
index 6444ebf..48d66bf 100644 (file)
@@ -22,6 +22,7 @@ config C6X
        select GENERIC_CLOCKEVENTS
        select MODULES_USE_ELF_RELA
        select MMU_GATHER_NO_RANGE if MMU
+       select SET_FS
 
 config MMU
        def_bool n
index 3d5afb5..2836f6e 100644 (file)
@@ -78,6 +78,7 @@ config CSKY
        select PCI_DOMAINS_GENERIC if PCI
        select PCI_SYSCALL if PCI
        select PCI_MSI if PCI
+       select SET_FS
 
 config LOCKDEP_SUPPORT
        def_bool y
index d11666d..7945de0 100644 (file)
@@ -25,6 +25,7 @@ config H8300
        select HAVE_ARCH_KGDB
        select HAVE_ARCH_HASH
        select CPU_NO_EFFICIENT_FFS
+       select SET_FS
        select UACCESS_MEMCPY
 
 config CPU_BIG_ENDIAN
index 667cfc5..f2afabb 100644 (file)
@@ -31,6 +31,7 @@ config HEXAGON
        select GENERIC_CLOCKEVENTS_BROADCAST
        select MODULES_USE_ELF_RELA
        select GENERIC_CPU_DEVICES
+       select SET_FS
        help
          Qualcomm Hexagon is a processor architecture designed for high
          performance and low power across a wide variety of applications.
index 5b4ec80..22a6853 100644 (file)
@@ -56,6 +56,7 @@ config IA64
        select NEED_DMA_MAP_STATE
        select NEED_SG_DMA_LENGTH
        select NUMA if !FLATMEM
+       select SET_FS
        default y
        help
          The Itanium Processor Family is Intel's 64-bit successor to
index 6f2f38d..dcf4ae8 100644 (file)
@@ -32,6 +32,7 @@ config M68K
        select OLD_SIGSUSPEND3
        select OLD_SIGACTION
        select MMU_GATHER_NO_RANGE if MMU
+       select SET_FS
 
 config CPU_BIG_ENDIAN
        def_bool y
index d262ac0..7e3d458 100644 (file)
@@ -46,6 +46,7 @@ config MICROBLAZE
        select CPU_NO_EFFICIENT_FFS
        select MMU_GATHER_NO_RANGE if MMU
        select SPARSE_IRQ
+       select SET_FS
 
 # Endianness selection
 choice
index c95fa3a..fbc2639 100644 (file)
@@ -87,6 +87,7 @@ config MIPS
        select MODULES_USE_ELF_RELA if MODULES && 64BIT
        select PERF_USE_VMALLOC
        select RTC_LIB
+       select SET_FS
        select SYSCTL_EXCEPTION_TRACE
        select VIRT_TO_BUS
 
index e30298e..e8e541f 100644 (file)
@@ -48,6 +48,7 @@ config NDS32
        select HAVE_FUNCTION_GRAPH_TRACER
        select HAVE_FTRACE_MCOUNT_RECORD
        select HAVE_DYNAMIC_FTRACE
+       select SET_FS
        help
          Andes(nds32) Linux support.
 
index c664514..c7c6ba6 100644 (file)
@@ -27,6 +27,7 @@ config NIOS2
        select USB_ARCH_HAS_HCD if USB_SUPPORT
        select CPU_NO_EFFICIENT_FFS
        select MMU_GATHER_NO_RANGE if MMU
+       select SET_FS
 
 config GENERIC_CSUM
        def_bool y
index 7e94fe3..6233c62 100644 (file)
@@ -39,6 +39,7 @@ config OPENRISC
        select ARCH_WANT_FRAME_POINTERS
        select GENERIC_IRQ_MULTI_HANDLER
        select MMU_GATHER_NO_RANGE if MMU
+       select SET_FS
 
 config CPU_BIG_ENDIAN
        def_bool y
index 3b0f53d..be70af4 100644 (file)
@@ -63,6 +63,7 @@ config PARISC
        select HAVE_FTRACE_MCOUNT_RECORD if HAVE_DYNAMIC_FTRACE
        select HAVE_KPROBES_ON_FTRACE
        select HAVE_DYNAMIC_FTRACE_WITH_REGS
+       select SET_FS
 
        help
          The PA-RISC microprocessor is designed by Hewlett-Packard and used
index 1f48bbf..3f09d6f 100644 (file)
@@ -249,6 +249,7 @@ config PPC
        select PCI_SYSCALL                      if PCI
        select PPC_DAWR                         if PPC64
        select RTC_LIB
+       select SET_FS
        select SPARSE_IRQ
        select SYSCTL_EXCEPTION_TRACE
        select THREAD_INFO_IN_TASK
index 7b59055..07d5304 100644 (file)
@@ -86,6 +86,7 @@ config RISCV
        select SPARSE_IRQ
        select SYSCTL_EXCEPTION_TRACE
        select THREAD_INFO_IN_TASK
+       select SET_FS
 
 config ARCH_MMAP_RND_BITS_MIN
        default 18 if 64BIT
index 3d86e12..fd81385 100644 (file)
@@ -185,6 +185,7 @@ config S390
        select OLD_SIGSUSPEND3
        select PCI_DOMAINS              if PCI
        select PCI_MSI                  if PCI
+       select SET_FS
        select SPARSE_IRQ
        select SYSCTL_EXCEPTION_TRACE
        select THREAD_INFO_IN_TASK
index d209271..2bd1653 100644 (file)
@@ -71,6 +71,7 @@ config SUPERH
        select PERF_EVENTS
        select PERF_USE_VMALLOC
        select RTC_LIB
+       select SET_FS
        select SPARSE_IRQ
        help
          The SuperH is a RISC processor targeted for use in embedded systems
index efeff2c..3e0cf03 100644 (file)
@@ -49,6 +49,7 @@ config SPARC
        select LOCKDEP_SMALL if LOCKDEP
        select NEED_DMA_MAP_STATE
        select NEED_SG_DMA_LENGTH
+       select SET_FS
 
 config SPARC32
        def_bool !64BIT
index eb51fec..3aefcd8 100644 (file)
@@ -19,6 +19,7 @@ config UML
        select GENERIC_CPU_DEVICES
        select GENERIC_CLOCKEVENTS
        select HAVE_GCC_PLUGINS
+       select SET_FS
        select TTY # Needed for line.c
 
 config MMU
index 7101ac6..f85c133 100644 (file)
@@ -237,6 +237,7 @@ config X86
        select HAVE_ARCH_KCSAN                  if X86_64
        select X86_FEATURE_NAMES                if PROC_FS
        select PROC_PID_ARCH_STATUS             if PROC_FS
+       select SET_FS
        imply IMA_SECURE_AND_OR_TRUSTED_BOOT    if EFI
 
 config INSTRUCTION_DECODER
index e997e01..94bad4d 100644 (file)
@@ -41,6 +41,7 @@ config XTENSA
        select IRQ_DOMAIN
        select MODULES_USE_ELF_RELA
        select PERF_USE_VMALLOC
+       select SET_FS
        select VIRT_TO_BUS
        help
          Xtensa processors are 32-bit RISC machines designed by Tensilica
index 94b2854..70073c8 100644 (file)
@@ -8,6 +8,7 @@
 
 #include <asm/uaccess.h>
 
+#ifdef CONFIG_SET_FS
 /*
  * Force the uaccess routines to be wired up for actual userspace access,
  * overriding any possible set_fs(KERNEL_DS) still lingering around.  Undone
@@ -25,6 +26,23 @@ static inline void force_uaccess_end(mm_segment_t oldfs)
 {
        set_fs(oldfs);
 }
+#else /* CONFIG_SET_FS */
+typedef struct {
+       /* empty dummy */
+} mm_segment_t;
+
+#define uaccess_kernel()               (false)
+#define user_addr_max()                        (TASK_SIZE_MAX)
+
+static inline mm_segment_t force_uaccess_begin(void)
+{
+       return (mm_segment_t) { };
+}
+
+static inline void force_uaccess_end(mm_segment_t oldfs)
+{
+}
+#endif /* CONFIG_SET_FS */
 
 /*
  * Architectures should provide two primitives (raw_copy_{to,from}_user())