linux/arch/x86/entry
Christian Brauner 42815808f1
timens: make vdso_join_timens() always succeed
As discussed on-list (cf. [1]), in order to make setns() support time
namespaces when attaching to multiple namespaces at once properly we
need to tweak vdso_join_timens() to always succeed. So switch
vdso_join_timens() to using a read lock and replacing
mmap_write_lock_killable() to mmap_read_lock() as we discussed.

Last cycle setns() was changed to support attaching to multiple namespaces
atomically. This requires all namespaces to have a point of no return where
they can't fail anymore. Specifically, <namespace-type>_install() is
allowed to perform permission checks and install the namespace into the new
struct nsset that it has been given but it is not allowed to make visible
changes to the affected task. Once <namespace-type>_install() returns
anything that the given namespace type requires to be setup in addition
needs to ideally be done in a function that can't fail or if it fails the
failure is not fatal. For time namespaces the relevant functions that fall
into this category are timens_set_vvar_page() and vdso_join_timens().
Currently the latter can fail but doesn't need to. With this we can go on
to implement a timens_commit() helper in a follow up patch to be used by
setns().

[1]: https://lore.kernel.org/lkml/20200611110221.pgd3r5qkjrjmfqa2@wittgenstein

Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
Reviewed-by: Andrei Vagin <avagin@gmail.com>
Cc: Will Deacon <will@kernel.org>
Cc: Vincenzo Frascino <vincenzo.frascino@arm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Dmitry Safonov <dima@arista.com>
Cc: linux-arm-kernel@lists.infradead.org
Link: https://lore.kernel.org/r/20200706154912.3248030-2-christian.brauner@ubuntu.com
2020-07-08 11:14:21 +02:00
..
syscalls vfs: add faccessat2 syscall 2020-05-14 16:44:25 +02:00
vdso timens: make vdso_join_timens() always succeed 2020-07-08 11:14:21 +02:00
vsyscall y2038: syscall implementation cleanups 2019-12-01 14:00:59 -08:00
calling.h x86/entry: Remove the apic/BUILD interrupt leftovers 2020-06-11 15:15:16 +02:00
common.c x86/entry, selftests: Further improve user entry sanity checks 2020-07-04 19:47:25 +02:00
entry_32.S x86/entry: Move SYSENTER's regs->sp and regs->flags fixups into C 2020-07-01 10:00:25 +02:00
entry_64_compat.S x86/entry/compat: Clear RAX high bits on Xen PV SYSENTER 2020-07-04 19:47:25 +02:00
entry_64.S x86/entry: Unbreak __irqentry_text_start/end magic 2020-06-11 15:15:29 +02:00
Makefile x86/entry: Make entry_64_compat.S objtool clean 2020-06-11 15:14:40 +02:00
syscall_32.c x86/entry: Drop asmlinkage from syscalls 2020-03-21 16:03:25 +01:00
syscall_64.c x86/entry: Drop asmlinkage from syscalls 2020-03-21 16:03:25 +01:00
syscall_x32.c x86/entry: Drop asmlinkage from syscalls 2020-03-21 16:03:25 +01:00
thunk_32.S x86/entry: Rename ___preempt_schedule 2020-03-21 16:03:53 +01:00
thunk_64.S x86/entry: Remove the TRACE_IRQS cruft 2020-06-11 15:15:19 +02:00