]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
staging: most: cdev: add missing check for cdev_add failure
authorColin Ian King <colin.king@canonical.com>
Sat, 2 Feb 2019 22:34:49 +0000 (22:34 +0000)
committerKhalid Elmously <khalid.elmously@canonical.com>
Fri, 14 Feb 2020 05:29:37 +0000 (00:29 -0500)
BugLink: https://bugs.launchpad.net/bugs/1863019
[ Upstream commit 5ae890780e1b4d08f2c0c5d4ea96fc3928fc0ee9 ]

Currently the call to cdev_add is missing a check for failure. Fix this by
checking for failure and exiting via a new error path that ensures the
allocated comp_channel struct is kfree'd.

Detected by CoverityScan, CID#1462359 ("Unchecked return value")

Fixes: 9bc79bbcd0c5 ("Staging: most: add MOST driver's aim-cdev module")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/staging/most/aim-cdev/cdev.c

index 1e5cbc893496a441b7a85c35027882abfdc16450..d000b6ff8a7d23ea451dede49a8cf0585b1e62ff 100644 (file)
@@ -455,7 +455,9 @@ static int aim_probe(struct most_interface *iface, int channel_id,
        c->devno = MKDEV(major, current_minor);
        cdev_init(&c->cdev, &channel_fops);
        c->cdev.owner = THIS_MODULE;
-       cdev_add(&c->cdev, c->devno, 1);
+       retval = cdev_add(&c->cdev, c->devno, 1);
+       if (retval < 0)
+               goto err_free_c;
        c->iface = iface;
        c->cfg = cfg;
        c->channel_id = channel_id;
@@ -491,6 +493,7 @@ error_create_device:
        list_del(&c->list);
 error_alloc_kfifo:
        cdev_del(&c->cdev);
+err_free_c:
        kfree(c);
 error_alloc_channel:
        ida_simple_remove(&minor_id, current_minor);