diff --git a/kernel/syscall.c b/kernel/syscall.c index d6aeee17..d95a5e90 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -51,6 +51,7 @@ #include #include #include +#include /* Headers taken from kitten LWK */ #include @@ -3816,7 +3817,8 @@ SYSCALL_DECLARE(shmctl) dkprintf("shmctl(%#x,%d,%p): lookup: %d\n", shmid, cmd, buf, error); return error; } - if ((obj->ds.shm_perm.uid != proc->euid) + if (!has_cap_sys_admin(thread) + && (obj->ds.shm_perm.uid != proc->euid) && (obj->ds.shm_perm.cuid != proc->euid)) { shmobj_list_unlock(); dkprintf("shmctl(%#x,%d,%p): -EPERM\n", shmid, cmd, buf);