lkml.org 
[lkml]   [2019]   [Jan]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.19 251/258] fs/proc/base.c: use ns_capable instead of capable for timerslack_ns
    Date
    From: Benjamin Gordon <bmgordon@google.com>

    [ Upstream commit 8da0b4f692c6d90b09c91f271517db746a22ff67 ]

    Access to timerslack_ns is controlled by a process having CAP_SYS_NICE
    in its effective capability set, but the current check looks in the root
    namespace instead of the process' user namespace. Since a process is
    allowed to do other activities controlled by CAP_SYS_NICE inside a
    namespace, it should also be able to adjust timerslack_ns.

    Link: http://lkml.kernel.org/r/20181030180012.232896-1-bmgordon@google.com
    Signed-off-by: Benjamin Gordon <bmgordon@google.com>
    Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
    Cc: John Stultz <john.stultz@linaro.org>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: "Serge E. Hallyn" <serge@hallyn.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Arjan van de Ven <arjan@linux.intel.com>
    Cc: Oren Laadan <orenl@cellrox.com>
    Cc: Ruchi Kandoi <kandoiruchi@google.com>
    Cc: Rom Lemarchand <romlem@android.com>
    Cc: Todd Kjos <tkjos@google.com>
    Cc: Colin Cross <ccross@android.com>
    Cc: Nick Kralevich <nnk@google.com>
    Cc: Dmitry Shmidt <dimitrysh@google.com>
    Cc: Elliott Hughes <enh@google.com>
    Cc: Alexey Dobriyan <adobriyan@gmail.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/proc/base.c | 12 +++++++++---
    1 file changed, 9 insertions(+), 3 deletions(-)

    diff --git a/fs/proc/base.c b/fs/proc/base.c
    index 7e9f07bf260d..5bdcf2159ff0 100644
    --- a/fs/proc/base.c
    +++ b/fs/proc/base.c
    @@ -2356,10 +2356,13 @@ static ssize_t timerslack_ns_write(struct file *file, const char __user *buf,
    return -ESRCH;

    if (p != current) {
    - if (!capable(CAP_SYS_NICE)) {
    + rcu_read_lock();
    + if (!ns_capable(__task_cred(p)->user_ns, CAP_SYS_NICE)) {
    + rcu_read_unlock();
    count = -EPERM;
    goto out;
    }
    + rcu_read_unlock();

    err = security_task_setscheduler(p);
    if (err) {
    @@ -2392,11 +2395,14 @@ static int timerslack_ns_show(struct seq_file *m, void *v)
    return -ESRCH;

    if (p != current) {
    -
    - if (!capable(CAP_SYS_NICE)) {
    + rcu_read_lock();
    + if (!ns_capable(__task_cred(p)->user_ns, CAP_SYS_NICE)) {
    + rcu_read_unlock();
    err = -EPERM;
    goto out;
    }
    + rcu_read_unlock();
    +
    err = security_task_getscheduler(p);
    if (err)
    goto out;
    --
    2.19.1
    \
     
     \ /
      Last update: 2019-01-28 18:09    [W:4.546 / U:0.500 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site