| From 83d847283366787b577b3fe8f150aceb37f8c055 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 2 Feb 2019 22:34:49 +0000 |
| Subject: staging: most: cdev: add missing check for cdev_add failure |
| |
| From: Colin Ian King <colin.king@canonical.com> |
| |
| [ 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> |
| --- |
| drivers/staging/most/aim-cdev/cdev.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/staging/most/aim-cdev/cdev.c b/drivers/staging/most/aim-cdev/cdev.c |
| index 7f51024dc5ebb..e87b9ed4f37de 100644 |
| --- a/drivers/staging/most/aim-cdev/cdev.c |
| +++ b/drivers/staging/most/aim-cdev/cdev.c |
| @@ -451,7 +451,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; |
| @@ -487,6 +489,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); |
| -- |
| 2.20.1 |
| |