lkml.org 
[lkml]   [2012]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[v2.6.34-stable 073/165] USB: pid_ns: ensure pid is not freed during kill_pid_info_as_uid
    Date
    From: Serge Hallyn <serge.hallyn@canonical.com>

    -------------------
    This is a commit scheduled for the next v2.6.34 longterm release.
    http://git.kernel.org/?p=linux/kernel/git/paulg/longterm-queue-2.6.34.git
    If you see a problem with using this for longterm, please comment.
    -------------------

    commit aec01c5895051849ed842dc5b8794017a7751f28 upstream.

    Alan Stern points out that after spin_unlock(&ps->lock) there is no
    guarantee that ps->pid won't be freed. Since kill_pid_info_as_uid() is
    called after the spin_unlock(), the pid passed to it must be pinned.

    Reported-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Serge Hallyn <serge.hallyn@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
    Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
    ---
    drivers/usb/core/devio.c | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)

    diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
    index 6088192..85a4967 100644
    --- a/drivers/usb/core/devio.c
    +++ b/drivers/usb/core/devio.c
    @@ -409,7 +409,7 @@ static void async_completed(struct urb *urb)
    sinfo.si_errno = as->status;
    sinfo.si_code = SI_ASYNCIO;
    sinfo.si_addr = as->userurb;
    - pid = as->pid;
    + pid = get_pid(as->pid);
    uid = as->uid;
    euid = as->euid;
    secid = as->secid;
    @@ -424,9 +424,11 @@ static void async_completed(struct urb *urb)
    cancel_bulk_urbs(ps, as->bulk_addr);
    spin_unlock(&ps->lock);

    - if (signr)
    + if (signr) {
    kill_pid_info_as_uid(sinfo.si_signo, &sinfo, pid, uid,
    euid, secid);
    + put_pid(pid);
    + }

    wake_up(&ps->wait);
    }
    --
    1.7.12.rc2


    \
     
     \ /
      Last update: 2012-08-15 23:22    [W:4.049 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site