lkml.org 
[lkml]   [2019]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 015/271] media: dvb: usb: fix use after free in dvb_usb_device_exit
    Date
    [ Upstream commit 6cf97230cd5f36b7665099083272595c55d72be7 ]

    dvb_usb_device_exit() frees and uses the device name in that order.
    Fix by storing the name in a buffer before freeing it.

    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Reported-by: syzbot+26ec41e9f788b3eba396@syzkaller.appspotmail.com
    Signed-off-by: Sean Young <sean@mess.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/media/usb/dvb-usb/dvb-usb-init.c | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    diff --git a/drivers/media/usb/dvb-usb/dvb-usb-init.c b/drivers/media/usb/dvb-usb/dvb-usb-init.c
    index 40ca4eafb137..39ac22486bcd 100644
    --- a/drivers/media/usb/dvb-usb/dvb-usb-init.c
    +++ b/drivers/media/usb/dvb-usb/dvb-usb-init.c
    @@ -287,12 +287,15 @@ EXPORT_SYMBOL(dvb_usb_device_init);
    void dvb_usb_device_exit(struct usb_interface *intf)
    {
    struct dvb_usb_device *d = usb_get_intfdata(intf);
    - const char *name = "generic DVB-USB module";
    + const char *default_name = "generic DVB-USB module";
    + char name[40];

    usb_set_intfdata(intf, NULL);
    if (d != NULL && d->desc != NULL) {
    - name = d->desc->name;
    + strscpy(name, d->desc->name, sizeof(name));
    dvb_usb_exit(d);
    + } else {
    + strscpy(name, default_name, sizeof(name));
    }
    info("%s successfully deinitialized and disconnected.", name);

    --
    2.20.1


    \
     
     \ /
      Last update: 2019-07-24 22:09    [W:2.315 / U:0.312 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site