* [PATCH v2 1/2] net: phy: fix yt8511 clang uninitialized variable warning
2021-05-25 20:33 [PATCH v2 0/2] fixes for yt8511 phy driver Peter Geis
@ 2021-05-25 20:33 ` Peter Geis
2021-05-25 20:33 ` [PATCH v2 2/2] net: phy: abort loading yt8511 driver in unsupported modes Peter Geis
2021-05-26 19:27 ` [PATCH v2 0/2] fixes for yt8511 phy driver Jakub Kicinski
2 siblings, 0 replies; 5+ messages in thread
From: Peter Geis @ 2021-05-25 20:33 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit, Russell King, David S . Miller,
Jakub Kicinski, Nathan Chancellor
Cc: netdev, linux-kernel, clang-built-linux, Peter Geis, kernel test robot
clang doesn't preinitialize variables. If phy_select_page failed and
returned an error, phy_restore_page would be called with `ret` being
uninitialized.
Even though phy_restore_page won't use `ret` in this scenario,
initialize `ret` to silence the warning.
Fixes: b1b41c047f73 ("net: phy: add driver for Motorcomm yt8511 phy")
Reported-by: kernel test robot <lkp@intel.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Peter Geis <pgwipeout@gmail.com>
---
drivers/net/phy/motorcomm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/phy/motorcomm.c b/drivers/net/phy/motorcomm.c
index 796b68f4b499..68cd19540c67 100644
--- a/drivers/net/phy/motorcomm.c
+++ b/drivers/net/phy/motorcomm.c
@@ -50,8 +50,8 @@ static int yt8511_write_page(struct phy_device *phydev, int page)
static int yt8511_config_init(struct phy_device *phydev)
{
+ int oldpage, ret = 0;
unsigned int ge, fe;
- int ret, oldpage;
/* set clock mode to 125mhz */
oldpage = phy_select_page(phydev, YT8511_EXT_CLK_GATE);
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/2] net: phy: abort loading yt8511 driver in unsupported modes
2021-05-25 20:33 [PATCH v2 0/2] fixes for yt8511 phy driver Peter Geis
2021-05-25 20:33 ` [PATCH v2 1/2] net: phy: fix yt8511 clang uninitialized variable warning Peter Geis
@ 2021-05-25 20:33 ` Peter Geis
2021-05-26 19:27 ` [PATCH v2 0/2] fixes for yt8511 phy driver Jakub Kicinski
2 siblings, 0 replies; 5+ messages in thread
From: Peter Geis @ 2021-05-25 20:33 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit, Russell King, David S . Miller,
Jakub Kicinski, Nathan Chancellor
Cc: netdev, linux-kernel, clang-built-linux, Peter Geis, kernel test robot
While investigating the clang `ge` uninitialized variable report, it was
discovered the default switch would have unintended consequences. Due to
the switch to __phy_modify, the driver would modify the ID values in the
default scenario.
Fix this by promoting the interface mode switch and aborting when the
mode is not a supported RGMII mode.
This prevents the `ge` and `fe` variables from ever being used
uninitialized.
Fixes: b1b41c047f73 ("net: phy: add driver for Motorcomm yt8511 phy")
Reported-by: kernel test robot <lkp@intel.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Peter Geis <pgwipeout@gmail.com>
---
drivers/net/phy/motorcomm.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/drivers/net/phy/motorcomm.c b/drivers/net/phy/motorcomm.c
index 68cd19540c67..7e6ac2c5e27e 100644
--- a/drivers/net/phy/motorcomm.c
+++ b/drivers/net/phy/motorcomm.c
@@ -53,15 +53,10 @@ static int yt8511_config_init(struct phy_device *phydev)
int oldpage, ret = 0;
unsigned int ge, fe;
- /* set clock mode to 125mhz */
oldpage = phy_select_page(phydev, YT8511_EXT_CLK_GATE);
if (oldpage < 0)
goto err_restore_page;
- ret = __phy_modify(phydev, YT8511_PAGE, 0, YT8511_CLK_125M);
- if (ret < 0)
- goto err_restore_page;
-
/* set rgmii delay mode */
switch (phydev->interface) {
case PHY_INTERFACE_MODE_RGMII:
@@ -80,14 +75,20 @@ static int yt8511_config_init(struct phy_device *phydev)
ge = YT8511_DELAY_RX | YT8511_DELAY_GE_TX_EN;
fe = YT8511_DELAY_FE_TX_EN;
break;
- default: /* leave everything alone in other modes */
- break;
+ default: /* do not support other modes */
+ ret = -EOPNOTSUPP;
+ goto err_restore_page;
}
ret = __phy_modify(phydev, YT8511_PAGE, (YT8511_DELAY_RX | YT8511_DELAY_GE_TX_EN), ge);
if (ret < 0)
goto err_restore_page;
+ /* set clock mode to 125mhz */
+ ret = __phy_modify(phydev, YT8511_PAGE, 0, YT8511_CLK_125M);
+ if (ret < 0)
+ goto err_restore_page;
+
/* fast ethernet delay is in a separate page */
ret = __phy_write(phydev, YT8511_PAGE_SELECT, YT8511_EXT_DELAY_DRIVE);
if (ret < 0)
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 0/2] fixes for yt8511 phy driver
2021-05-25 20:33 [PATCH v2 0/2] fixes for yt8511 phy driver Peter Geis
2021-05-25 20:33 ` [PATCH v2 1/2] net: phy: fix yt8511 clang uninitialized variable warning Peter Geis
2021-05-25 20:33 ` [PATCH v2 2/2] net: phy: abort loading yt8511 driver in unsupported modes Peter Geis
@ 2021-05-26 19:27 ` Jakub Kicinski
2021-05-26 20:15 ` Peter Geis
2 siblings, 1 reply; 5+ messages in thread
From: Jakub Kicinski @ 2021-05-26 19:27 UTC (permalink / raw)
To: Peter Geis
Cc: Andrew Lunn, Heiner Kallweit, Russell King, David S . Miller,
Nathan Chancellor, netdev, linux-kernel, clang-built-linux
On Tue, 25 May 2021 16:33:12 -0400 Peter Geis wrote:
> The Intel clang bot caught a few uninitialized variables in the new
> Motorcomm driver. While investigating the issue, it was found that the
> driver would have unintended effects when used in an unsupported mode.
>
> Fixed the uninitialized ret variable and abort loading the driver in
> unsupported modes.
>
> Thank you to the Intel clang bot for catching these.
Fixes tag need work, the hashes don't match the ones in net-next.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 0/2] fixes for yt8511 phy driver
2021-05-26 19:27 ` [PATCH v2 0/2] fixes for yt8511 phy driver Jakub Kicinski
@ 2021-05-26 20:15 ` Peter Geis
0 siblings, 0 replies; 5+ messages in thread
From: Peter Geis @ 2021-05-26 20:15 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Andrew Lunn, Heiner Kallweit, Russell King, David S . Miller,
Nathan Chancellor, Linux Kernel Network Developers,
Linux Kernel Mailing List, clang-built-linux
On Wed, May 26, 2021 at 3:27 PM Jakub Kicinski <kuba@kernel.org> wrote:
>
> On Tue, 25 May 2021 16:33:12 -0400 Peter Geis wrote:
> > The Intel clang bot caught a few uninitialized variables in the new
> > Motorcomm driver. While investigating the issue, it was found that the
> > driver would have unintended effects when used in an unsupported mode.
> >
> > Fixed the uninitialized ret variable and abort loading the driver in
> > unsupported modes.
> >
> > Thank you to the Intel clang bot for catching these.
>
> Fixes tag need work, the hashes don't match the ones in net-next.
It seems when I asked git for the hash for that patch, it grabbed my
original patch which was against linux-next.
Apologies for the confusion.
^ permalink raw reply [flat|nested] 5+ messages in thread