diff mbox series

[net-next] net: mdio_bus: validate "addr" for mdiobus_is_registered_device()

Message ID E1qNxvu-00111m-1V@rmk-PC.armlinux.org.uk (mailing list archive)
State Accepted
Commit 09bd2d7ddaedcdfa4aa3f4d54c103f984a93bd32
Delegated to: Netdev Maintainers
Headers show
Series [net-next] net: mdio_bus: validate "addr" for mdiobus_is_registered_device() | expand

Checks

Context Check Description
netdev/series_format success Single patches do not need cover letters
netdev/tree_selection success Clearly marked for net-next
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 1342 this patch: 1342
netdev/cc_maintainers success CCed 8 of 8 maintainers
netdev/build_clang success Errors and warnings before: 1365 this patch: 1365
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 1365 this patch: 1365
netdev/checkpatch warning CHECK: Comparison to NULL could be written "mdiobus_find_device"
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Russell King (Oracle) July 24, 2023, 3:57 p.m. UTC
mdiobus_is_registered_device() doesn't checking that "addr" was valid
before dereferencing bus->mdio_map[]. Extract the code that checks
this from mdiobus_get_phy(), and use it here as well.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
I've had this patch kicking about for a while - probably a good idea?
It shouldn't cause a regression, but if it does it means we're already
dereferencing the arrray outside its bounds in
mdiobus_is_registered_device().

 drivers/net/phy/mdio_bus.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

Comments

Andrew Lunn July 25, 2023, 9:23 p.m. UTC | #1
On Mon, Jul 24, 2023 at 04:57:14PM +0100, Russell King (Oracle) wrote:
> mdiobus_is_registered_device() doesn't checking that "addr" was valid
> before dereferencing bus->mdio_map[]. Extract the code that checks
> this from mdiobus_get_phy(), and use it here as well.
> 
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew
patchwork-bot+netdevbpf@kernel.org July 26, 2023, 3:20 a.m. UTC | #2
Hello:

This patch was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Mon, 24 Jul 2023 16:57:14 +0100 you wrote:
> mdiobus_is_registered_device() doesn't checking that "addr" was valid
> before dereferencing bus->mdio_map[]. Extract the code that checks
> this from mdiobus_get_phy(), and use it here as well.
> 
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> ---
> I've had this patch kicking about for a while - probably a good idea?
> It shouldn't cause a regression, but if it does it means we're already
> dereferencing the arrray outside its bounds in
> mdiobus_is_registered_device().
> 
> [...]

Here is the summary with links:
  - [net-next] net: mdio_bus: validate "addr" for mdiobus_is_registered_device()
    https://git.kernel.org/netdev/net-next/c/09bd2d7ddaed

You are awesome, thank you!
diff mbox series

Patch

diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index bc04048de2fa..25dcaa49ab8b 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -107,16 +107,21 @@  int mdiobus_unregister_device(struct mdio_device *mdiodev)
 }
 EXPORT_SYMBOL(mdiobus_unregister_device);
 
-struct phy_device *mdiobus_get_phy(struct mii_bus *bus, int addr)
+static struct mdio_device *mdiobus_find_device(struct mii_bus *bus, int addr)
 {
 	bool addr_valid = addr >= 0 && addr < ARRAY_SIZE(bus->mdio_map);
-	struct mdio_device *mdiodev;
 
 	if (WARN_ONCE(!addr_valid, "addr %d out of range\n", addr))
 		return NULL;
 
-	mdiodev = bus->mdio_map[addr];
+	return bus->mdio_map[addr];
+}
 
+struct phy_device *mdiobus_get_phy(struct mii_bus *bus, int addr)
+{
+	struct mdio_device *mdiodev;
+
+	mdiodev = mdiobus_find_device(bus, addr);
 	if (!mdiodev)
 		return NULL;
 
@@ -129,7 +134,7 @@  EXPORT_SYMBOL(mdiobus_get_phy);
 
 bool mdiobus_is_registered_device(struct mii_bus *bus, int addr)
 {
-	return bus->mdio_map[addr];
+	return mdiobus_find_device(bus, addr) != NULL;
 }
 EXPORT_SYMBOL(mdiobus_is_registered_device);