Skip to content

Commit

Permalink
media: dvb-usb: Fix error handling in dvb_usb_i2c_init
Browse files Browse the repository at this point in the history
[ Upstream commit 131ae38 ]

In dvb_usb_i2c_init, if i2c_add_adapter fails, it only prints an error
message, and then continues to set DVB_USB_STATE_I2C. This affects the
logic of dvb_usb_i2c_exit, which leads to that, the deletion of i2c_adap
even if the i2c_add_adapter fails.

Fix this by returning at the failure of i2c_add_adapter and then move
dvb_usb_i2c_exit out of the error handling code of dvb_usb_i2c_init.

Fixes: 13a79f1 ("media: dvb-usb: Fix memory leak at error in dvb_usb_device_init()")
Signed-off-by: Dongliang Mu <mudongliangabcd@gmail.com>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
mudongliang authored and gregkh committed Sep 15, 2021
1 parent f6879b6 commit bfb78a0
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 3 deletions.
9 changes: 7 additions & 2 deletions drivers/media/usb/dvb-usb/dvb-usb-i2c.c
Expand Up @@ -17,7 +17,8 @@ int dvb_usb_i2c_init(struct dvb_usb_device *d)

if (d->props.i2c_algo == NULL) {
err("no i2c algorithm specified");
return -EINVAL;
ret = -EINVAL;
goto err;
}

strscpy(d->i2c_adap.name, d->desc->name, sizeof(d->i2c_adap.name));
Expand All @@ -27,11 +28,15 @@ int dvb_usb_i2c_init(struct dvb_usb_device *d)

i2c_set_adapdata(&d->i2c_adap, d);

if ((ret = i2c_add_adapter(&d->i2c_adap)) < 0)
ret = i2c_add_adapter(&d->i2c_adap);
if (ret < 0) {
err("could not add i2c adapter");
goto err;
}

d->state |= DVB_USB_STATE_I2C;

err:
return ret;
}

Expand Down
2 changes: 1 addition & 1 deletion drivers/media/usb/dvb-usb/dvb-usb-init.c
Expand Up @@ -194,8 +194,8 @@ static int dvb_usb_init(struct dvb_usb_device *d, short *adapter_nums)

err_adapter_init:
dvb_usb_adapter_exit(d);
err_i2c_init:
dvb_usb_i2c_exit(d);
err_i2c_init:
if (d->priv && d->props.priv_destroy)
d->props.priv_destroy(d);
err_priv_init:
Expand Down

0 comments on commit bfb78a0

Please sign in to comment.