Skip to content

Commit 8f8abb8

Browse files
javiercarrascocruzkuba-moo
authored andcommitted
net: usb: dm9601: fix uninitialized variable use in dm9601_mdio_read
syzbot has found an uninit-value bug triggered by the dm9601 driver [1]. This error happens because the variable res is not updated if the call to dm_read_shared_word returns an error. In this particular case -EPROTO was returned and res stayed uninitialized. This can be avoided by checking the return value of dm_read_shared_word and propagating the error if the read operation failed. [1] https://syzkaller.appspot.com/bug?extid=1f53a30781af65d2c955 Cc: [email protected] Signed-off-by: Javier Carrasco <[email protected]> Reported-and-tested-by: [email protected] Acked-by: Peter Korsgaard <[email protected]> Fixes: d0374f4 ("USB: Davicom DM9601 usbnet driver") Link: https://lore.kernel.org/r/20231009-topic-dm9601_uninit_mdio_read-v2-1-f2fe39739b6c@gmail.com Signed-off-by: Jakub Kicinski <[email protected]>
1 parent ad98426 commit 8f8abb8

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

drivers/net/usb/dm9601.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,13 +222,18 @@ static int dm9601_mdio_read(struct net_device *netdev, int phy_id, int loc)
222222
struct usbnet *dev = netdev_priv(netdev);
223223

224224
__le16 res;
225+
int err;
225226

226227
if (phy_id) {
227228
netdev_dbg(dev->net, "Only internal phy supported\n");
228229
return 0;
229230
}
230231

231-
dm_read_shared_word(dev, 1, loc, &res);
232+
err = dm_read_shared_word(dev, 1, loc, &res);
233+
if (err < 0) {
234+
netdev_err(dev->net, "MDIO read error: %d\n", err);
235+
return err;
236+
}
232237

233238
netdev_dbg(dev->net,
234239
"dm9601_mdio_read() phy_id=0x%02x, loc=0x%02x, returns=0x%04x\n",

0 commit comments

Comments
 (0)