lkml.org 
[lkml]   [2010]   [Feb]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/6] p9auth: set fsuid
    Date
    From: Serge E. Hallyn <serue@us.ibm.com>

    fsuid should always trail euid changes. So p9auth should
    set fsuid as well when it sets ruid and euid. Whether the
    suid should also be set is an open question - keeping the
    old uid in suid may be useful, or may just serve to trick
    lazy userspace.

    Note that so long as we do not also set suid, the setuid_fixup()
    code will not (when we later switch to setresuid()) fully
    fill/clear capability sets. So while I had previously thought
    that keeping suid unchanged would be useful, I think it is
    better to change all uids.

    Signed-off-by: Serge E. Hallyn <serue@us.ibm.com>
    Cc: Greg KH <greg@kroah.com>
    cc: rsc@swtch.com
    Cc: Ashwin Ganti <ashwin.ganti@gmail.com>
    Cc: ericvh@gmail.com
    Cc: devel@linuxdriverproject.org
    Cc: linux-kernel@vger.kernel.org
    Cc: Ron Minnich <rminnich@gmail.com>
    ---
    drivers/staging/p9auth/p9auth.c | 14 +++++++++-----
    1 files changed, 9 insertions(+), 5 deletions(-)

    diff --git a/drivers/staging/p9auth/p9auth.c b/drivers/staging/p9auth/p9auth.c
    index db79626..70ef45b 100644
    --- a/drivers/staging/p9auth/p9auth.c
    +++ b/drivers/staging/p9auth/p9auth.c
    @@ -275,10 +275,14 @@ static ssize_t cap_write(struct file *filp, const char __user *buf,
    goto out;
    }
    /*
    - * What all id's need to be changed here? uid,
    - * euid, fsid, savedids ?? Currently I am
    - * changing the effective user id since most of
    - * the authorisation decisions are based on it
    + * Change all uids. It might be useful to
    + * keep suid unchanged, however that will
    + * mean that changing from uid=0 to uid=!0
    + * pP is not emptied (only pE is), and when
    + * changing from uid=!0 to uid=0, sets are
    + * not filled. They will be correct after
    + * the next exec, but this is IMO not
    + * sufficient. So change all uids.
    */
    new = prepare_creds();
    if (!new) {
    @@ -286,7 +290,7 @@ static ssize_t cap_write(struct file *filp, const char __user *buf,
    goto out;
    }
    new->uid = (uid_t) target_int;
    - new->euid = (uid_t) target_int;
    + new->suid = new->fsuid = new->euid = new->uid;
    retval = commit_creds(new);
    if (retval)
    goto out;
    --
    1.6.1


    \
     
     \ /
      Last update: 2010-02-02 16:59    [W:0.021 / U:0.244 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site