RE: [PATCH net v1 1/1] net: usb: lan78xx: Sanitize return values of register read/write functions
From: Woojung.Huh
Date: Fri Mar 07 2025 - 08:51:27 EST
Add proper maintainers in the list
Thangaraj Samynathan <Thangaraj.S@xxxxxxxxxxxxx>
Rengarajan Sundararajan <Rengarajan.S@xxxxxxxxxxxxx>
https://web.git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/tree/MAINTAINERS#n24528
> -----Original Message-----
> From: Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx>
> Sent: Friday, March 7, 2025 5:12 AM
> To: David S. Miller <davem@xxxxxxxxxxxxx>; Eric Dumazet
> <edumazet@xxxxxxxxxx>; Jakub Kicinski <kuba@xxxxxxxxxx>; Paolo Abeni
> <pabeni@xxxxxxxxxx>; Woojung Huh - C21699 <Woojung.Huh@xxxxxxxxxxxxx>;
> Andrew Lunn <andrew+netdev@xxxxxxx>
> Cc: Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx>; Mark Brown
> <broonie@xxxxxxxxxx>; kernel@xxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx;
> netdev@xxxxxxxxxxxxxxx; UNGLinuxDriver <UNGLinuxDriver@xxxxxxxxxxxxx>; Phil
> Elwell <phil@xxxxxxxxxxxxxxx>
> Subject: [PATCH net v1 1/1] net: usb: lan78xx: Sanitize return values of
> register read/write functions
>
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the
> content is safe
>
> 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@xxxxxxxxxx>
> Closes: https://lore.kernel.org/all/ac965de8-f320-430f-80f6-
> b16f4e1ba06d@xxxxxxxxxxxxx
> Signed-off-by: Oleksij Rempel <o.rempel@xxxxxxxxxxxxxx>
> ---
> drivers/net/usb/lan78xx.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
> index a91bf9c7e31d..137adf6d5b08 100644
> --- a/drivers/net/usb/lan78xx.c
> +++ b/drivers/net/usb/lan78xx.c
> @@ -627,7 +627,7 @@ static int lan78xx_read_reg(struct lan78xx_net *dev, u32
> index, u32 *data)
>
> kfree(buf);
>
> - return ret;
> + return ret < 0 ? ret : 0;
> }
>
> static int lan78xx_write_reg(struct lan78xx_net *dev, u32 index, u32 data)
> @@ -658,7 +658,7 @@ static int lan78xx_write_reg(struct lan78xx_net *dev,
> u32 index, u32 data)
>
> kfree(buf);
>
> - return ret;
> + return ret < 0 ? ret : 0;
> }
>
> static int lan78xx_update_reg(struct lan78xx_net *dev, u32 reg, u32 mask,
> --
> 2.39.5