* [PATCH v3 1/2] net: phy: fix yt8511 clang uninitialized variable warning
2021-05-29 11:05 [PATCH v3 0/2] fixes for yt8511 phy driver Peter Geis
@ 2021-05-29 11:05 ` Peter Geis
2021-05-29 11:05 ` [PATCH v3 2/2] net: phy: abort loading yt8511 driver in unsupported modes Peter Geis
2021-05-30 21:30 ` [PATCH v3 0/2] fixes for yt8511 phy driver patchwork-bot+netdevbpf
2 siblings, 0 replies; 4+ messages in thread
From: Peter Geis @ 2021-05-29 11:05 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: 48e8c6f1612b ("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] 4+ messages in thread
* [PATCH v3 2/2] net: phy: abort loading yt8511 driver in unsupported modes
2021-05-29 11:05 [PATCH v3 0/2] fixes for yt8511 phy driver Peter Geis
2021-05-29 11:05 ` [PATCH v3 1/2] net: phy: fix yt8511 clang uninitialized variable warning Peter Geis
@ 2021-05-29 11:05 ` Peter Geis
2021-05-30 21:30 ` [PATCH v3 0/2] fixes for yt8511 phy driver patchwork-bot+netdevbpf
2 siblings, 0 replies; 4+ messages in thread
From: Peter Geis @ 2021-05-29 11:05 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: 48e8c6f1612b ("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] 4+ messages in thread
* Re: [PATCH v3 0/2] fixes for yt8511 phy driver
2021-05-29 11:05 [PATCH v3 0/2] fixes for yt8511 phy driver Peter Geis
2021-05-29 11:05 ` [PATCH v3 1/2] net: phy: fix yt8511 clang uninitialized variable warning Peter Geis
2021-05-29 11:05 ` [PATCH v3 2/2] net: phy: abort loading yt8511 driver in unsupported modes Peter Geis
@ 2021-05-30 21:30 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 4+ messages in thread
From: patchwork-bot+netdevbpf @ 2021-05-30 21:30 UTC (permalink / raw)
To: Peter Geis
Cc: andrew, hkallweit1, linux, davem, kuba, nathan, netdev,
linux-kernel, clang-built-linux
Hello:
This series was applied to netdev/net-next.git (refs/heads/master):
On Sat, 29 May 2021 07:05:54 -0400 you 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.
>
> [...]
Here is the summary with links:
- [v3,1/2] net: phy: fix yt8511 clang uninitialized variable warning
https://git.kernel.org/netdev/net-next/c/546d6bad18c0
- [v3,2/2] net: phy: abort loading yt8511 driver in unsupported modes
https://git.kernel.org/netdev/net-next/c/0cc8bddb5b06
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 4+ messages in thread