qemu/linux-user
Michael Vogt 9651cead2f linux-user: add openat2 support in linux-user
This commit adds support for the `openat2()` syscall in the
`linux-user` userspace emulator.

It is implemented by extracting a new helper `maybe_do_fake_open()`
out of the exiting `do_guest_openat()` and share that with the
new `do_guest_openat2()`. Unfortunately we cannot just make
do_guest_openat2() a superset of do_guest_openat() because the
openat2() syscall is stricter with the argument checking and
will return an error for invalid flags or mode combinations (which
open()/openat() will ignore).

The implementation is similar to SYSCALL_DEFINE(openat2), i.e.
a new `copy_struct_from_user()` is used that works the same
as the kernels version to support backwards-compatibility
for struct syscall argument.

Instead of including openat2.h we create a copy of `open_how`
as `open_how_ver0` to ensure that if the structure grows we
can log a LOG_UNIMP warning.

Note that in this commit using openat2() for a "faked" file in
/proc will honor the "resolve" flags for
RESOLVE_NO_{MAGIC,SYM}LINKS for path based access to /proc/self/exe
(which is the only magic link we support for faked files).
Note it will not catch special access via e.g. dirfd. This is not
great but it seems similar to the exiting behavior when openat()
is called with a dirfd to "/proc". Here too the fake file lookup
may not catch the special file because no dirfd is used to
determine if the path is in /proc.

Signed-off-by: Michael Vogt <mvogt@redhat.com>
Buglink: https://github.com/osbuild/bootc-image-builder/issues/619
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-ID: <1c2c8c9db3731ed4c6fd9b10c63637c3e4caf8f5.1727795334.git.mvogt@redhat.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2024-10-08 06:31:36 -07:00
..
aarch64 linux-user,aarch64: move to syscalltbl file 2024-09-22 09:30:18 +02:00
alpha target/ppc: Fix lxvx/stxvx facility check 2024-09-27 10:32:29 +01:00
arm target/ppc: Fix lxvx/stxvx facility check 2024-09-27 10:32:29 +01:00
generic linux-user: Split TARGET_PROT_* out of syscall_defs.h 2023-07-15 08:02:32 +01:00
hexagon linux-user,hexagon: move to syscalltbl file 2024-09-22 09:30:18 +02:00
hppa linux-user/hppa: fix -Werror=maybe-uninitialized false-positive 2024-10-02 16:14:29 +04:00
i386 target/ppc: Fix lxvx/stxvx facility check 2024-09-27 10:32:29 +01:00
include linux-user: cleanup unused linux-user/include/host directories 2023-08-08 20:44:08 +02:00
loongarch64 linux-user,loongarch: move to syscalltbl file 2024-09-22 09:30:18 +02:00
m68k target/ppc: Fix lxvx/stxvx facility check 2024-09-27 10:32:29 +01:00
microblaze target/ppc: Fix lxvx/stxvx facility check 2024-09-27 10:32:29 +01:00
mips target/ppc: Fix lxvx/stxvx facility check 2024-09-27 10:32:29 +01:00
mips64 target/ppc: Fix lxvx/stxvx facility check 2024-09-27 10:32:29 +01:00
openrisc linux-user,openrisc: move to syscalltbl file 2024-09-22 09:30:18 +02:00
ppc target/ppc: Fix lxvx/stxvx facility check 2024-09-27 10:32:29 +01:00
riscv linux-user,riscv: move to syscalltbl file 2024-09-22 09:30:18 +02:00
s390x target/ppc: Fix lxvx/stxvx facility check 2024-09-27 10:32:29 +01:00
sh4 target/ppc: Fix lxvx/stxvx facility check 2024-09-27 10:32:29 +01:00
sparc target/ppc: Fix lxvx/stxvx facility check 2024-09-27 10:32:29 +01:00
x86_64 target/ppc: Fix lxvx/stxvx facility check 2024-09-27 10:32:29 +01:00
xtensa target/ppc: Fix lxvx/stxvx facility check 2024-09-27 10:32:29 +01:00
cpu_loop-common.h linux-user: Add guest memory layout to exception dump 2022-10-25 09:20:40 +02:00
elfload.c linux-user: Fix parse_elf_properties GNU0_MAGIC check 2024-10-08 06:31:22 -07:00
errnos.c.inc linux-user: Simplify host <-> target errno conversion using macros 2021-07-12 21:53:35 +02:00
exit.c accel/tcg: Move perf and debuginfo support to tcg/ 2024-01-29 21:04:10 +10:00
fd-trans.c linux-user: handle netlink flag NLA_F_NESTED 2023-03-10 20:45:47 +01:00
fd-trans.h linux-user: fix timerfd read endianness conversion 2023-03-10 20:42:00 +01:00
flat.h linux-user/flatload.c: Remove unused bFLT shared-library and ZFLAT code 2024-04-25 10:21:06 +01:00
flatload.c linux-user/flatload: Take mmap_lock in load_flt_binary() 2024-10-08 06:28:46 -07:00
gen-vdso-elfn.c.inc linux-user/ppc: Add vdso 2023-10-30 13:41:56 -07:00
gen-vdso.c linux-user: Add gen-vdso tool 2023-10-30 13:41:55 -07:00
ioctls.h linux-user: Add ioctl for BLKBSZSET 2024-06-05 09:04:30 -07:00
linux_loop.h linux-user: implement more loop ioctls 2021-11-29 14:54:17 +01:00
linuxload.c {linux,bsd}-user: Introduce get_task_state() 2024-03-06 12:35:19 +00:00
loader.h linux-user: Report AArch64 hwcap2 fields above bit 31 2023-11-02 13:36:45 +00:00
main.c linux-user/main: Check errno when getting AT_EXECFD 2024-07-30 07:59:23 +10:00
meson.build linux-user,hexagon: move to syscalltbl file 2024-09-22 09:30:18 +02:00
mmap.c linux-user: Handle short reads in mmap_h_gt_g 2024-08-21 09:09:46 +10:00
qemu.h user: Declare get_task_state() once in 'accel/tcg/vcpu-state.h' 2024-05-06 14:13:45 +02:00
semihost.c semihosting: Remove qemu_semihosting_console_outs 2022-06-28 04:41:20 +05:30
signal-common.h linux-user: Move tswap_siginfo out of target code 2024-03-13 11:43:52 +00:00
signal.c exec/cpu: Extract page-protection definitions to page-protection.h 2024-05-06 11:17:15 +02:00
socket.h Supply missing header guards 2019-06-12 13:20:21 +02:00
strace.c linux-user: Fix shmat() strace 2024-03-26 18:20:36 -10:00
strace.h linux-user: Have do_syscall() use CPUArchState* instead of void* 2022-05-23 22:47:19 +02:00
strace.list linux-user: Add strace for shmat 2024-03-01 08:05:59 -10:00
syscall_defs.h linux-user: add openat2 support in linux-user 2024-10-08 06:31:36 -07:00
syscall_types.h linux-user: Add FITRIM ioctl 2024-04-24 15:46:00 -07:00
syscall.c linux-user: add openat2 support in linux-user 2024-10-08 06:31:36 -07:00
thunk.c user: Move 'thunk.h' from 'exec/user' to 'user' 2024-05-03 17:21:20 +02:00
trace-events linux-user: Rename user_force_sig tracepoint to match function name 2022-01-18 12:41:42 +01:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
uaccess.c meson: Make DEBUG_REMAP a meson option 2024-04-24 15:46:00 -07:00
uname.c linux-user: Remove pointless CPU{ARCH}State casts 2022-05-23 22:47:20 +02:00
uname.h linux-user: Have do_syscall() use CPUArchState* instead of void* 2022-05-23 22:47:19 +02:00
user-internals.h linux-user: Remove unused handle_vm86_fault 2024-10-03 17:26:06 +03:00
user-mmap.h linux-user: Move shmat and shmdt implementations to mmap.c 2023-09-01 13:35:02 -07:00
vm86.c linux-user: Remove unused handle_vm86_fault 2024-10-03 17:26:06 +03:00