From bd98478b6c2e6f5ac60cd9495095e4a0dbc8265c Mon Sep 17 00:00:00 2001 From: Matheus Date: Fri, 30 Aug 2024 19:23:53 -0300 Subject: [PATCH] fchownat: remove setuid and setgid bits on a chown --- kernel-src/sys/syscalls/fchownat.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kernel-src/sys/syscalls/fchownat.c b/kernel-src/sys/syscalls/fchownat.c index c23e3514..68261186 100644 --- a/kernel-src/sys/syscalls/fchownat.c +++ b/kernel-src/sys/syscalls/fchownat.c @@ -63,12 +63,11 @@ syscallret_t syscall_fchownat(context_t *, int fd, char *upath, uid_t owner, gid goto cleanup; } - // TODO retain set uid and set gid bits if an auth access was ok attr.uid = owner; attr.gid = group; attr.mode = (attr.mode) & ~(V_ATTR_MODE_SGID | V_ATTR_MODE_SUID); - ret.errno = VOP_SETATTR(node, &attr, ((owner == -1) ? 0 : V_ATTR_UID) | ((group == -1) ? 0 : V_ATTR_GID), &_cpu()->thread->proc->cred); + ret.errno = VOP_SETATTR(node, &attr, ((owner == -1) ? 0 : V_ATTR_UID) | ((group == -1) ? 0 : V_ATTR_GID) | ((group + owner == -2) ? 0 : V_ATTR_MODE), &_cpu()->thread->proc->cred); ret.ret = ret.errno ? -1 : 0; VOP_UNLOCK(node);