* [PULL 1/2] linux-user: Guard local FUTEX_CMD_MASK definition
2026-07-26 19:36 [PULL 0/2] Linux user patches Helge Deller
@ 2026-07-26 19:36 ` Helge Deller
2026-07-26 19:36 ` [PULL 2/2] linux-user: fix guards for the fsmount(2) syscall series Helge Deller
1 sibling, 0 replies; 3+ messages in thread
From: Helge Deller @ 2026-07-26 19:36 UTC (permalink / raw)
To: qemu-devel, Stefan Hajnoczi
Cc: Helge Deller, Laurent Vivier, Matt Turner, Cédric Le Goater,
Pierrick Bouvier, Philippe Mathieu-Daudé
From: Cédric Le Goater <clg@redhat.com>
Building linux-user on a host with Linux 7.2 kernel headers fails with
a macro redefinition error for FUTEX_CMD_MASK. The kernel commit
3ca9595d9fb6 ("futex: Add support for unlocking robust futexes")
expanded the mask to include the new FUTEX_ROBUST_UNLOCK and
FUTEX_ROBUST_LIST32 flags, which conflicts with QEMU's local
definition.
Add a #ifndef guard so the host definition takes precedence when
available. The local fallback is kept for older kernel headers
(pre-2.6.29) that lack FUTEX_CMD_MASK or define a mask without
FUTEX_CLOCK_REALTIME.
Signed-off-by: Cédric Le Goater <clg@redhat.com>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
Signed-off-by: Helge Deller <deller@gmx.de>
---
linux-user/syscall_defs.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index 5799769f83..e033c7db34 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -2593,7 +2593,9 @@ struct target_drm_i915_getparam {
#define FUTEX_PRIVATE_FLAG 128
#define FUTEX_CLOCK_REALTIME 256
+#ifndef FUTEX_CMD_MASK
#define FUTEX_CMD_MASK ~(FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME)
+#endif
#if defined(TARGET_X86_64)
#define TARGET_EPOLL_PACKED QEMU_PACKED
--
2.54.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* [PULL 2/2] linux-user: fix guards for the fsmount(2) syscall series
2026-07-26 19:36 [PULL 0/2] Linux user patches Helge Deller
2026-07-26 19:36 ` [PULL 1/2] linux-user: Guard local FUTEX_CMD_MASK definition Helge Deller
@ 2026-07-26 19:36 ` Helge Deller
1 sibling, 0 replies; 3+ messages in thread
From: Helge Deller @ 2026-07-26 19:36 UTC (permalink / raw)
To: qemu-devel, Stefan Hajnoczi
Cc: Helge Deller, Laurent Vivier, Matt Turner, Cédric Le Goater,
Pierrick Bouvier
From: Matt Turner <mattst88@gmail.com>
The fsopen(), fsconfig(), fsmount() and fspick() implementations are
guarded by defined(NR_fsopen) rather than defined(__NR_fsopen). No such
macro exists, so the guard is never true and the entire series compiles
out. Guests calling any of the four get -ENOSYS, which for example makes
systemd's credential setup fail with EXIT_CREDENTIALS for most units.
The strace bits for fsconfig() have the same typo.
Fixes: 767c32fe6983 ("linux-user: implement fsmount(2) series of syscalls")
Fixes: 6e0aa9f6c731 ("linux-user/strace: add fsmount series of syscalls")
Signed-off-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Helge Deller <deller@gmx.de>
Signed-off-by: Helge Deller <deller@gmx.de>
---
linux-user/strace.c | 2 +-
linux-user/strace.list | 2 +-
linux-user/syscall.c | 4 ++--
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/linux-user/strace.c b/linux-user/strace.c
index 3a81cc95f4..af1cf9548a 100644
--- a/linux-user/strace.c
+++ b/linux-user/strace.c
@@ -4344,7 +4344,7 @@ print_statx(CPUArchState *cpu_env, const struct syscallname *name,
}
#endif
-#if defined(TARGET_NR_fsconfig) && defined(NR_fsconfig)
+#if defined(TARGET_NR_fsconfig) && defined(__NR_fsconfig)
static void
print_fsconfig_cmd_name(int cmd)
{
diff --git a/linux-user/strace.list b/linux-user/strace.list
index e363892e0a..ba1c1dc0ae 100644
--- a/linux-user/strace.list
+++ b/linux-user/strace.list
@@ -1725,7 +1725,7 @@
#ifdef TARGET_NR_fsopen
{ TARGET_NR_fsopen, "fsopen", "%s(%s,%d)", NULL, NULL },
#endif
-#if defined(TARGET_NR_fsconfig) && defined(NR_fsconfig)
+#if defined(TARGET_NR_fsconfig) && defined(__NR_fsconfig)
{ TARGET_NR_fsconfig, "fsconfig", NULL, print_fsconfig, NULL },
#endif
#ifdef TARGET_NR_fsmount
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 3da5530d42..740142825d 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -9740,7 +9740,7 @@ _syscall5(int, sys_move_mount, int, __from_dfd, const char *, __from_pathname,
int, __to_dfd, const char *, __to_pathname, unsigned int, flag)
#endif
-#if defined(TARGET_NR_fsopen) && defined(NR_fsopen)
+#if defined(TARGET_NR_fsopen) && defined(__NR_fsopen)
#define __NR_sys_fsopen __NR_fsopen
_syscall2(int, sys_fsopen, const char *, fs_name, unsigned int, flags);
#define __NR_sys_fsconfig __NR_fsconfig
@@ -14485,7 +14485,7 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
return do_map_shadow_stack(cpu_env, arg1, arg2, arg3);
#endif
-#if defined(TARGET_NR_fsopen) && defined(NR_fsopen)
+#if defined(TARGET_NR_fsopen) && defined(__NR_fsopen)
case TARGET_NR_fsopen:
{
p = lock_user_string(arg1);
--
2.54.0
^ permalink raw reply related [flat|nested] 3+ messages in thread