diff options
author | Serge Hallyn <serge.hallyn@ubuntu.com> | 2013-07-23 14:18:53 -0400 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2013-08-31 02:44:09 -0400 |
commit | f54fb863c6bbcbafdfc332b4a4260abb5a002137 (patch) | |
tree | ced72284affb914341940a5f854e4d2dd56622d1 /security/commoncap.c | |
parent | 6e556ce209b09528dbf1931cbfd5d323e1345926 (diff) |
capabilities: allow nice if we are privileged
We allow task A to change B's nice level if it has a supserset of
B's privileges, or of it has CAP_SYS_NICE. Also allow it if A has
CAP_SYS_NICE with respect to B - meaning it is root in the same
namespace, or it created B's namespace.
Signed-off-by: Serge Hallyn <serge.hallyn@canonical.com>
Reviewed-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Diffstat (limited to 'security/commoncap.c')
-rw-r--r-- | security/commoncap.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/security/commoncap.c b/security/commoncap.c index 9fccf71b2b62..b9d613e0ef14 100644 --- a/security/commoncap.c +++ b/security/commoncap.c | |||
@@ -768,16 +768,16 @@ int cap_task_fix_setuid(struct cred *new, const struct cred *old, int flags) | |||
768 | */ | 768 | */ |
769 | static int cap_safe_nice(struct task_struct *p) | 769 | static int cap_safe_nice(struct task_struct *p) |
770 | { | 770 | { |
771 | int is_subset; | 771 | int is_subset, ret = 0; |
772 | 772 | ||
773 | rcu_read_lock(); | 773 | rcu_read_lock(); |
774 | is_subset = cap_issubset(__task_cred(p)->cap_permitted, | 774 | is_subset = cap_issubset(__task_cred(p)->cap_permitted, |
775 | current_cred()->cap_permitted); | 775 | current_cred()->cap_permitted); |
776 | if (!is_subset && !ns_capable(__task_cred(p)->user_ns, CAP_SYS_NICE)) | ||
777 | ret = -EPERM; | ||
776 | rcu_read_unlock(); | 778 | rcu_read_unlock(); |
777 | 779 | ||
778 | if (!is_subset && !capable(CAP_SYS_NICE)) | 780 | return ret; |
779 | return -EPERM; | ||
780 | return 0; | ||
781 | } | 781 | } |
782 | 782 | ||
783 | /** | 783 | /** |