media: dvb-usb: fix uninit-value in vp702x_read_mac_addr
authorDongliang Mu <mudongliangabcd@gmail.com>
Fri, 25 Jun 2021 05:59:04 +0000 (07:59 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Sep 2021 09:42:59 +0000 (11:42 +0200)
[ Upstream commit 797c061ad715a9a1480eb73f44b6939fbe3209ed ]

If vp702x_usb_in_op fails, the mac address is not initialized.
And vp702x_read_mac_addr does not handle this failure, which leads to
the uninit-value in dvb_usb_adapter_dvb_init.

Fix this by handling the failure of vp702x_usb_in_op.

Fixes: 786baecfe78f ("[media] dvb-usb: move it to drivers/media/usb/dvb-usb")
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>
drivers/media/usb/dvb-usb/vp702x.c

index 40de33de90a7aef04ae6cf95153c8177596a16ba..5c3b0a7ca27e13ffd56d9eeb5b65aeb5279a5a13 100644 (file)
@@ -294,16 +294,22 @@ static int vp702x_rc_query(struct dvb_usb_device *d, u32 *event, int *state)
 static int vp702x_read_mac_addr(struct dvb_usb_device *d,u8 mac[6])
 {
        u8 i, *buf;
+       int ret;
        struct vp702x_device_state *st = d->priv;
 
        mutex_lock(&st->buf_mutex);
        buf = st->buf;
-       for (i = 6; i < 12; i++)
-               vp702x_usb_in_op(d, READ_EEPROM_REQ, i, 1, &buf[i - 6], 1);
+       for (i = 6; i < 12; i++) {
+               ret = vp702x_usb_in_op(d, READ_EEPROM_REQ, i, 1,
+                                      &buf[i - 6], 1);
+               if (ret < 0)
+                       goto err;
+       }
 
        memcpy(mac, buf, 6);
+err:
        mutex_unlock(&st->buf_mutex);
-       return 0;
+       return ret;
 }
 
 static int vp702x_frontend_attach(struct dvb_usb_adapter *adap)