lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 185/800] media: dvbdev: fix error logic at dvb_register_device()
    Date
    From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>

    [ Upstream commit 1fec2ecc252301110e4149e6183fa70460d29674 ]

    As reported by smatch:

    drivers/media/dvb-core/dvbdev.c: drivers/media/dvb-core/dvbdev.c:510 dvb_register_device() warn: '&dvbdev->list_head' not removed from list
    drivers/media/dvb-core/dvbdev.c: drivers/media/dvb-core/dvbdev.c:530 dvb_register_device() warn: '&dvbdev->list_head' not removed from list
    drivers/media/dvb-core/dvbdev.c: drivers/media/dvb-core/dvbdev.c:545 dvb_register_device() warn: '&dvbdev->list_head' not removed from list

    The error logic inside dvb_register_device() doesn't remove
    devices from the dvb_adapter_list in case of errors.

    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/media/dvb-core/dvbdev.c | 3 +++
    1 file changed, 3 insertions(+)

    diff --git a/drivers/media/dvb-core/dvbdev.c b/drivers/media/dvb-core/dvbdev.c
    index 3862ddc86ec4..795d9bfaba5c 100644
    --- a/drivers/media/dvb-core/dvbdev.c
    +++ b/drivers/media/dvb-core/dvbdev.c
    @@ -506,6 +506,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
    break;

    if (minor == MAX_DVB_MINORS) {
    + list_del (&dvbdev->list_head);
    kfree(dvbdevfops);
    kfree(dvbdev);
    up_write(&minor_rwsem);
    @@ -526,6 +527,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
    __func__);

    dvb_media_device_free(dvbdev);
    + list_del (&dvbdev->list_head);
    kfree(dvbdevfops);
    kfree(dvbdev);
    mutex_unlock(&dvbdev_register_lock);
    @@ -541,6 +543,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev,
    pr_err("%s: failed to create device dvb%d.%s%d (%ld)\n",
    __func__, adap->num, dnames[type], id, PTR_ERR(clsdev));
    dvb_media_device_free(dvbdev);
    + list_del (&dvbdev->list_head);
    kfree(dvbdevfops);
    kfree(dvbdev);
    return PTR_ERR(clsdev);
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-12 10:41    [W:3.390 / U:0.464 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site