Commit ebe00ad8fb for qemu.org
commit ebe00ad8fbaa0e4e43200f1513a8b4c886323180
Author: Warner Losh <imp@bsdimp.com>
Date: Tue May 5 00:38:32 2026 -0600
bsd-user: Add extended attribute and ACL system call dispatch
Wire up extended attribute and ACL system calls: extattrctl,
extattr_set/get/delete for file, fd, and link variants,
extattr_list for fd, file, and link, and all __acl_* operations
(aclcheck, delete, get, set for fd, file, and link).
Signed-off-by: Stacey Son <sson@FreeBSD.org>
Assisted-by: Claude Opus 4.6 (1M context)
Acked-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Warner Losh <imp@bsdimp.com>
diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c
index f385034a53..a14efd3fd4 100644
--- a/bsd-user/freebsd/os-syscall.c
+++ b/bsd-user/freebsd/os-syscall.c
@@ -1365,6 +1365,109 @@ static abi_long freebsd_syscall(CPUArchState *env, int num, abi_long arg1,
ret = do_freebsd_sysarch(env, arg1, arg2);
break;
+ /*
+ * extended attributes and ACL system calls
+ */
+ case TARGET_FREEBSD_NR_extattrctl: /* extattrctl() */
+ ret = do_freebsd_extattrctl(arg1, arg2, arg3, arg4, arg5);
+ break;
+
+ case TARGET_FREEBSD_NR_extattr_set_file: /* extattr_set_file(2) */
+ ret = do_freebsd_extattr_set_file(arg1, arg2, arg3, arg4, arg5);
+ break;
+
+ case TARGET_FREEBSD_NR_extattr_get_file: /* extattr_get_file(2) */
+ ret = do_freebsd_extattr_get_file(arg1, arg2, arg3, arg4, arg5);
+ break;
+
+ case TARGET_FREEBSD_NR_extattr_delete_file: /* extattr_delete_file(2) */
+ ret = do_freebsd_extattr_delete_file(arg1, arg2, arg3);
+ break;
+
+ case TARGET_FREEBSD_NR_extattr_set_fd: /* extattr_set_fd(2) */
+ ret = do_freebsd_extattr_set_fd(arg1, arg2, arg3, arg4, arg5);
+ break;
+
+ case TARGET_FREEBSD_NR_extattr_get_fd: /* extattr_get_fd(2) */
+ ret = do_freebsd_extattr_get_fd(arg1, arg2, arg3, arg4, arg5);
+ break;
+
+ case TARGET_FREEBSD_NR_extattr_delete_fd: /* extattr_delete_fd(2) */
+ ret = do_freebsd_extattr_delete_fd(arg1, arg2, arg3);
+ break;
+
+ case TARGET_FREEBSD_NR_extattr_get_link: /* extattr_get_link(2) */
+ ret = do_freebsd_extattr_get_link(arg1, arg2, arg3, arg4, arg5);
+ break;
+
+ case TARGET_FREEBSD_NR_extattr_set_link: /* extattr_set_link(2) */
+ ret = do_freebsd_extattr_set_link(arg1, arg2, arg3, arg4, arg5);
+ break;
+
+ case TARGET_FREEBSD_NR_extattr_delete_link: /* extattr_delete_link(2) */
+ ret = do_freebsd_extattr_delete_link(arg1, arg2, arg3);
+ break;
+
+ case TARGET_FREEBSD_NR_extattr_list_fd: /* extattr_list_fd(2) */
+ ret = do_freebsd_extattr_list_fd(arg1, arg2, arg3, arg4);
+ break;
+
+ case TARGET_FREEBSD_NR_extattr_list_file: /* extattr_list_file(2) */
+ ret = do_freebsd_extattr_list_file(arg1, arg2, arg3, arg4);
+ break;
+
+ case TARGET_FREEBSD_NR_extattr_list_link: /* extattr_list_link(2) */
+ ret = do_freebsd_extattr_list_link(arg1, arg2, arg3, arg4);
+ break;
+
+ case TARGET_FREEBSD_NR___acl_aclcheck_fd: /* __acl_aclcheck_fd() */
+ ret = do_freebsd__acl_aclcheck_fd(arg1, arg2, arg3);
+ break;
+
+ case TARGET_FREEBSD_NR___acl_aclcheck_file: /* __acl_aclcheck_file() */
+ ret = do_freebsd__acl_aclcheck_file(arg1, arg2, arg3);
+ break;
+
+ case TARGET_FREEBSD_NR___acl_aclcheck_link: /* __acl_aclcheck_link() */
+ ret = do_freebsd__acl_aclcheck_link(arg1, arg2, arg3);
+ break;
+
+ case TARGET_FREEBSD_NR___acl_delete_fd: /* __acl_delete_fd() */
+ ret = do_freebsd__acl_delete_fd(arg1, arg2);
+ break;
+
+ case TARGET_FREEBSD_NR___acl_delete_file: /* __acl_delete_file() */
+ ret = do_freebsd__acl_delete_file(arg1, arg2);
+ break;
+
+ case TARGET_FREEBSD_NR___acl_delete_link: /* __acl_delete_link() */
+ ret = do_freebsd__acl_delete_link(arg1, arg2);
+ break;
+
+ case TARGET_FREEBSD_NR___acl_get_fd: /* __acl_get_fd() */
+ ret = do_freebsd__acl_get_fd(arg1, arg2, arg3);
+ break;
+
+ case TARGET_FREEBSD_NR___acl_get_file: /* __acl_get_file() */
+ ret = do_freebsd__acl_get_file(arg1, arg2, arg3);
+ break;
+
+ case TARGET_FREEBSD_NR___acl_get_link: /* __acl_get_link() */
+ ret = do_freebsd__acl_get_link(arg1, arg2, arg3);
+ break;
+
+ case TARGET_FREEBSD_NR___acl_set_fd: /* __acl_set_fd() */
+ ret = do_freebsd__acl_set_fd(arg1, arg2, arg3);
+ break;
+
+ case TARGET_FREEBSD_NR___acl_set_file: /* __acl_set_file() */
+ ret = do_freebsd__acl_set_file(arg1, arg2, arg3);
+ break;
+
+ case TARGET_FREEBSD_NR___acl_set_link: /* __acl_set_link() */
+ ret = do_freebsd__acl_set_link(arg1, arg2, arg3);
+ break;
+
default:
qemu_log_mask(LOG_UNIMP, "Unsupported syscall: %d\n", num);
ret = -TARGET_ENOSYS;