Need to check return value of genphy_read_status(),
because higher in the call hierarchy is the
dsa_register_switch() function,
which is used in various drivers.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
Fixes: 33615367f378 ("net: dsa: Support internal phy on 'cpu' port")
Signed-off-by: Alexandra Diupina <[email protected]>
---
net/dsa/port.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/net/dsa/port.c b/net/dsa/port.c
index c42dac87671b..c411f30bb5f6 100644
--- a/net/dsa/port.c
+++ b/net/dsa/port.c
@@ -1765,7 +1765,9 @@ static int dsa_shared_port_fixed_link_register_of(struct dsa_port *dp)
mode = PHY_INTERFACE_MODE_NA;
phydev->interface = mode;
- genphy_read_status(phydev);
+ err = genphy_read_status(phydev);
+ if (err)
+ return err;
if (ds->ops->adjust_link)
ds->ops->adjust_link(ds, port, phydev);
--
2.30.2
On Thu, Mar 14, 2024 at 09:30:08AM +0300, Alexandra Diupina wrote:
> Need to check return value of genphy_read_status(),
> because higher in the call hierarchy is the
> dsa_register_switch() function,
> which is used in various drivers.
I don't understand the commit message. Why is it important to
dsa_register_switch()?
Andrew
Hello, Andrew!
The dsa_register_switch() function is used in various DSA
drivers (in probe function), so it is necessary to check all
possible errors. If the return value (may be an error code)
of genphy_read_status() is not checked in
dsa_shared_port_fixed_link_register_of(), a possible error
in dsa_register_switch() may be missed.
14/03/24 16:02, Andrew Lunn пишет:
> On Thu, Mar 14, 2024 at 09:30:08AM +0300, Alexandra Diupina wrote:
>> Need to check return value of genphy_read_status(),
>> because higher in the call hierarchy is the
>> dsa_register_switch() function,
>> which is used in various drivers.
> I don't understand the commit message. Why is it important to
> dsa_register_switch()?
>
> Andrew
On 15/03/2024 03:25, Александра Дюпина wrote:
> Hello, Andrew!
(please do not top-post)
>
> The dsa_register_switch() function is used in various DSA
> drivers (in probe function), so it is necessary to check all
> possible errors. If the return value (may be an error code)
> of genphy_read_status() is not checked in
> dsa_shared_port_fixed_link_register_of(), a possible error
> in dsa_register_switch() may be missed.
This is not a path that will fail, because the fixed PHY emulation layer
is not a real piece of hardware, therefore no MDIO read could really
cause a problem here. I don't have a strong opinion however if you want
to propagate it properly.
--
Florian
21/03/24 02:48, Florian Fainelli пишет:
>
>
> On 15/03/2024 03:25, Александра Дюпина wrote:
>> Hello, Andrew!
>
> (please do not top-post)
>
>>
>> The dsa_register_switch() function is used in various DSA
>> drivers (in probe function), so it is necessary to check all
>> possible errors. If the return value (may be an error code)
>> of genphy_read_status() is not checked in
>> dsa_shared_port_fixed_link_register_of(), a possible error
>> in dsa_register_switch() may be missed.
>
> This is not a path that will fail, because the fixed PHY emulation
> layer is not a real piece of hardware, therefore no MDIO read could
> really cause a problem here. I don't have a strong opinion however if
> you want to propagate it properly.
Hi, Florian!
I would like to make sure that I have understood you correctly. Checking
the return value of genphy_read_status() in
dsa_shared_port_fixed_link_register_of() is not needed because
dsa_shared_port_fixed_link_register_of() is called if
of_phy_is_fixed_link()==true (this means that the PHY emulation layer is
used, link is registered by of_phy_register_fixed_link() without errors
and therefore there cannot be an error in genphy_read_status()). Right?
just a friendly reminder
Alexandra