net: core: 'ethtool' issue with querying phy settings
authorArun Parameswaran <aparames@broadcom.com>
Wed, 20 May 2015 21:35:30 +0000 (14:35 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 22 May 2015 20:14:17 +0000 (16:14 -0400)
commitf96dee13b8e10f00840124255bed1d8b4c6afd6f
treedd3502ddd833a82c514fa07615c9fefe1b3fa058
parent47cc84ce0c2fe75c99ea5963c4b5704dd78ead54
net: core: 'ethtool' issue with querying phy settings

When trying to configure the settings for PHY1, using commands
like 'ethtool -s eth0 phyad 1 speed 100', the 'ethtool' seems to
modify other settings apart from the speed of the PHY1, in the
above case.

The ethtool seems to query the settings for PHY0, and use this
as the base to apply the new settings to the PHY1. This is
causing the other settings of the PHY 1 to be wrongly
configured.

The issue is caused by the '_ethtool_get_settings()' API, which
gets called because of the 'ETHTOOL_GSET' command, is clearing
the 'cmd' pointer (of type 'struct ethtool_cmd') by calling
memset. This clears all the parameters (if any) passed for the
'ETHTOOL_GSET' cmd. So the driver's callback is always invoked
with 'cmd->phy_address' as '0'.

The '_ethtool_get_settings()' is called from other files in the
'net/core'. So the fix is applied to the 'ethtool_get_settings()'
which is only called in the context of the 'ethtool'.

Signed-off-by: Arun Parameswaran <aparames@broadcom.com>
Reviewed-by: Ray Jui <rjui@broadcom.com>
Reviewed-by: Scott Branden <sbranden@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/ethtool.c