Re: remove the last set_fs() in common code, and remove it for x86 and powerpc

From: Christoph Hellwig
Date: Mon Aug 17 2020 - 03:39:59 EST


Adding Linus as I forgot to add him to the patch bomb, sorry..

On Mon, Aug 17, 2020 at 09:32:01AM +0200, Christoph Hellwig wrote:
> Hi all,
>
> this series removes the last set_fs() used to force a kernel address
> space for the uaccess code in the kernel read/write/splice code, and then
> stops implementing the address space overrides entirely for x86 and
> powerpc.
>
> The file system part has been posted a few times, and the read/write side
> has been pretty much unchanced. For splice this series drops the
> conversion of the seq_file and sysctl code to the iter ops, and thus loses
> the splice support for them. The reasons for that is that it caused a lot
> of churn for not much use - splice for these small files really isn't much
> of a win, even if existing userspace uses it. All callers I found do the
> proper fallback, but if this turns out to be an issue the conversion can
> be resurrected.
>
> Besides x86 and powerpc I plan to eventually convert all other
> architectures, although this will be a slow process, starting with the
> easier ones once the infrastructure is merged. The process to convert
> architectures is roughtly:
>
> - ensure there is no set_fs(KERNEL_DS) left in arch specific code
> - implement __get_kernel_nofault and __put_kernel_nofault
> - remove the arch specific address limitation functionality
>
> Diffstat:
> arch/Kconfig | 3
> arch/alpha/Kconfig | 1
> arch/arc/Kconfig | 1
> arch/arm/Kconfig | 1
> arch/arm64/Kconfig | 1
> arch/c6x/Kconfig | 1
> arch/csky/Kconfig | 1
> arch/h8300/Kconfig | 1
> arch/hexagon/Kconfig | 1
> arch/ia64/Kconfig | 1
> arch/m68k/Kconfig | 1
> arch/microblaze/Kconfig | 1
> arch/mips/Kconfig | 1
> arch/nds32/Kconfig | 1
> arch/nios2/Kconfig | 1
> arch/openrisc/Kconfig | 1
> arch/parisc/Kconfig | 1
> arch/powerpc/include/asm/processor.h | 7 -
> arch/powerpc/include/asm/thread_info.h | 5 -
> arch/powerpc/include/asm/uaccess.h | 78 ++++++++-----------
> arch/powerpc/kernel/signal.c | 3
> arch/powerpc/lib/sstep.c | 6 -
> arch/riscv/Kconfig | 1
> arch/s390/Kconfig | 1
> arch/sh/Kconfig | 1
> arch/sparc/Kconfig | 1
> arch/um/Kconfig | 1
> arch/x86/ia32/ia32_aout.c | 1
> arch/x86/include/asm/page_32_types.h | 11 ++
> arch/x86/include/asm/page_64_types.h | 38 +++++++++
> arch/x86/include/asm/processor.h | 60 ---------------
> arch/x86/include/asm/thread_info.h | 2
> arch/x86/include/asm/uaccess.h | 26 ------
> arch/x86/kernel/asm-offsets.c | 3
> arch/x86/lib/getuser.S | 28 ++++---
> arch/x86/lib/putuser.S | 21 +++--
> arch/xtensa/Kconfig | 1
> drivers/char/mem.c | 16 ----
> drivers/misc/lkdtm/bugs.c | 2
> drivers/misc/lkdtm/core.c | 4 +
> drivers/misc/lkdtm/usercopy.c | 2
> fs/read_write.c | 69 ++++++++++-------
> fs/splice.c | 130 +++------------------------------
> include/linux/fs.h | 2
> include/linux/uaccess.h | 18 ++++
> lib/test_bitmap.c | 10 ++
> 46 files changed, 235 insertions(+), 332 deletions(-)
---end quoted text---