Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

net: usb: lan78xx: Sanitize return values of register read/write functions

usb_control_msg() returns the number of transferred bytes or a negative
error code. The current implementation propagates the transferred byte
count, which is unintended. This affects code paths that assume a
boolean success/failure check, such as the EEPROM detection logic.

Fix this by ensuring lan78xx_read_reg() and lan78xx_write_reg() return
only 0 on success and preserve negative error codes.

This approach is consistent with existing usage, as the transferred byte
count is not explicitly checked elsewhere.

Fixes: 8b1b2ca83b20 ("net: usb: lan78xx: Improve error handling in EEPROM and OTP operations")
Reported-by: Mark Brown <broonie@kernel.org>
Closes: https://lore.kernel.org/all/ac965de8-f320-430f-80f6-b16f4e1ba06d@sirena.org.uk
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Tested-by: Mark Brown <broonie@kernel.org>
Link: https://patch.msgid.link/20250307101223.3025632-1-o.rempel@pengutronix.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Oleksij Rempel and committed by
Jakub Kicinski
cfa693bf d0a4a1b3

+2 -2
+2 -2
drivers/net/usb/lan78xx.c
··· 627 627 628 628 kfree(buf); 629 629 630 - return ret; 630 + return ret < 0 ? ret : 0; 631 631 } 632 632 633 633 static int lan78xx_write_reg(struct lan78xx_net *dev, u32 index, u32 data) ··· 658 658 659 659 kfree(buf); 660 660 661 - return ret; 661 + return ret < 0 ? ret : 0; 662 662 } 663 663 664 664 static int lan78xx_update_reg(struct lan78xx_net *dev, u32 reg, u32 mask,