mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
userns: user namespaces: convert several capable() calls
CAP_IPC_OWNER and CAP_IPC_LOCK can be checked against current_user_ns(), because the resource comes from current's own ipc namespace. setuid/setgid are to uids in own namespace, so again checks can be against current_user_ns(). Changelog: Jan 11: Use task_ns_capable() in place of sched_capable(). Jan 11: Use nsown_capable() as suggested by Bastian Blank. Jan 11: Clarify (hopefully) some logic in futex and sched.c Feb 15: use ns_capable for ipc, not nsown_capable Feb 23: let copy_ipcs handle setting ipc_ns->user_ns Feb 23: pass ns down rather than taking it from current [[email protected]: coding-style fixes] Signed-off-by: Serge E. Hallyn <[email protected]> Acked-by: "Eric W. Biederman" <[email protected]> Acked-by: Daniel Lezcano <[email protected]> Acked-by: David Howells <[email protected]> Cc: James Morris <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
b515498f5b
commit
b0e77598f8
13 changed files with 75 additions and 45 deletions
10
ipc/sem.c
10
ipc/sem.c
|
|
@ -817,7 +817,7 @@ static int semctl_nolock(struct ipc_namespace *ns, int semid,
|
|||
}
|
||||
|
||||
err = -EACCES;
|
||||
if (ipcperms (&sma->sem_perm, S_IRUGO))
|
||||
if (ipcperms(ns, &sma->sem_perm, S_IRUGO))
|
||||
goto out_unlock;
|
||||
|
||||
err = security_sem_semctl(sma, cmd);
|
||||
|
|
@ -862,7 +862,8 @@ static int semctl_main(struct ipc_namespace *ns, int semid, int semnum,
|
|||
nsems = sma->sem_nsems;
|
||||
|
||||
err = -EACCES;
|
||||
if (ipcperms (&sma->sem_perm, (cmd==SETVAL||cmd==SETALL)?S_IWUGO:S_IRUGO))
|
||||
if (ipcperms(ns, &sma->sem_perm,
|
||||
(cmd == SETVAL || cmd == SETALL) ? S_IWUGO : S_IRUGO))
|
||||
goto out_unlock;
|
||||
|
||||
err = security_sem_semctl(sma, cmd);
|
||||
|
|
@ -1047,7 +1048,8 @@ static int semctl_down(struct ipc_namespace *ns, int semid,
|
|||
return -EFAULT;
|
||||
}
|
||||
|
||||
ipcp = ipcctl_pre_down(&sem_ids(ns), semid, cmd, &semid64.sem_perm, 0);
|
||||
ipcp = ipcctl_pre_down(ns, &sem_ids(ns), semid, cmd,
|
||||
&semid64.sem_perm, 0);
|
||||
if (IS_ERR(ipcp))
|
||||
return PTR_ERR(ipcp);
|
||||
|
||||
|
|
@ -1386,7 +1388,7 @@ SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops,
|
|||
goto out_unlock_free;
|
||||
|
||||
error = -EACCES;
|
||||
if (ipcperms(&sma->sem_perm, alter ? S_IWUGO : S_IRUGO))
|
||||
if (ipcperms(ns, &sma->sem_perm, alter ? S_IWUGO : S_IRUGO))
|
||||
goto out_unlock_free;
|
||||
|
||||
error = security_sem_semop(sma, sops, nsops, alter);
|
||||
|
|
|
|||
Loading…
Reference in a new issue