Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Serge Hallyn and committed by
Eric W. Biederman
f54fb863 6e556ce2

+4 -4
+4 -4
security/commoncap.c
··· 768 768 */ 769 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 773 rcu_read_lock(); 774 774 is_subset = cap_issubset(__task_cred(p)->cap_permitted, 775 775 current_cred()->cap_permitted); 776 + if (!is_subset && !ns_capable(__task_cred(p)->user_ns, CAP_SYS_NICE)) 777 + ret = -EPERM; 776 778 rcu_read_unlock(); 777 779 778 - if (!is_subset && !capable(CAP_SYS_NICE)) 779 - return -EPERM; 780 - return 0; 780 + return ret; 781 781 } 782 782 783 783 /**