lkml.org 
[lkml]   [2019]   [Aug]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 153/158] media: cpia2_usb: first wake up, then free in disconnect
    Date
    From: Oliver Neukum <oneukum@suse.com>

    commit eff73de2b1600ad8230692f00bc0ab49b166512a upstream.

    Kasan reported a use after free in cpia2_usb_disconnect()
    It first freed everything and then woke up those waiting.
    The reverse order is correct.

    Fixes: 6c493f8b28c67 ("[media] cpia2: major overhaul to get it in a working state again")

    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Reported-by: syzbot+0c90fc937c84f97d0aa6@syzkaller.appspotmail.com
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/media/usb/cpia2/cpia2_usb.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    --- a/drivers/media/usb/cpia2/cpia2_usb.c
    +++ b/drivers/media/usb/cpia2/cpia2_usb.c
    @@ -884,7 +884,6 @@ static void cpia2_usb_disconnect(struct
    cpia2_unregister_camera(cam);
    v4l2_device_disconnect(&cam->v4l2_dev);
    mutex_unlock(&cam->v4l2_lock);
    - v4l2_device_put(&cam->v4l2_dev);

    if(cam->buffers) {
    DBG("Wakeup waiting processes\n");
    @@ -897,6 +896,8 @@ static void cpia2_usb_disconnect(struct
    DBG("Releasing interface\n");
    usb_driver_release_interface(&cpia2_driver, intf);

    + v4l2_device_put(&cam->v4l2_dev);
    +
    LOG("CPiA2 camera disconnected.\n");
    }


    \
     
     \ /
      Last update: 2019-08-02 11:39    [W:2.142 / U:0.908 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site