[PATCH net 0/2] net: ethtool: netlink: Fix notifications for

Maxime Chevallier posted 2 patches 9 months, 3 weeks ago
net/ethtool/cabletest.c |  8 ++++----
net/ethtool/linkstate.c |  2 +-
net/ethtool/netlink.c   | 21 +++++++++++++++++----
net/ethtool/netlink.h   |  5 +++--
net/ethtool/phy.c       |  2 +-
net/ethtool/plca.c      |  6 +++---
net/ethtool/pse-pd.c    |  4 ++--
net/ethtool/stats.c     |  2 +-
net/ethtool/strset.c    |  2 +-
9 files changed, 33 insertions(+), 19 deletions(-)
[PATCH net 0/2] net: ethtool: netlink: Fix notifications for
Posted by Maxime Chevallier 9 months, 3 weeks ago
It has been found (thanks to Parthiban) that the PLCA ethtool commands
were failing since 6.12, due to the phy_link_topology work. This was
traced back to the ethnl notifications mechanism, in which calls to
ethnl_req_get_phydev() crashed in the notification path following a
->set request.

The typical callsite for ethnl_req_get_phydev() looks like :

    phydev = ethnl_req_get_phydev(req_base, tb[ETHTOOL_A_XXX_HEADER],
				  info->extack);

as 'tb' is NULL in the notification path for the ->prepare_data ethnl
ops, this causes crashes. The solution for that is to change the
prototype of ethnl_req_get_phydev() to perform checks inside the helper
(patch 1).

While investigating that, I realised that the notification path for PHYs
is not correct anyways. As we don't have a netlink request to parse, we
can't know for sure which PHY the notification event targets in the case
of a notification following a ->set request.

Patch 2 introduces a context structure that is used between ->set
requests and the followup notification, to keep track of the PHY that
the original request targeted for the notification.

Thanks Parthiban for the report (not on netdev@ though).

Maxime

Maxime Chevallier (2):
  net: ethtool: netlink: Allow NULL nlattrs when getting a phy_device
  net: ethtool: netlink: Pass a context for default ethnl notifications

 net/ethtool/cabletest.c |  8 ++++----
 net/ethtool/linkstate.c |  2 +-
 net/ethtool/netlink.c   | 21 +++++++++++++++++----
 net/ethtool/netlink.h   |  5 +++--
 net/ethtool/phy.c       |  2 +-
 net/ethtool/plca.c      |  6 +++---
 net/ethtool/pse-pd.c    |  4 ++--
 net/ethtool/stats.c     |  2 +-
 net/ethtool/strset.c    |  2 +-
 9 files changed, 33 insertions(+), 19 deletions(-)

-- 
2.48.1
Re: [PATCH net 0/2] net: ethtool: netlink: Fix notifications for
Posted by Parthiban.Veerasooran@microchip.com 9 months, 3 weeks ago
Hi Maxime,

I did a quick test with your patches and it seems working fine without 
kernel crash.

Best regards,
Parthiban V
On 27/02/25 11:54 pm, Maxime Chevallier wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> It has been found (thanks to Parthiban) that the PLCA ethtool commands
> were failing since 6.12, due to the phy_link_topology work. This was
> traced back to the ethnl notifications mechanism, in which calls to
> ethnl_req_get_phydev() crashed in the notification path following a
> ->set request.
> 
> The typical callsite for ethnl_req_get_phydev() looks like :
> 
>      phydev = ethnl_req_get_phydev(req_base, tb[ETHTOOL_A_XXX_HEADER],
>                                    info->extack);
> 
> as 'tb' is NULL in the notification path for the ->prepare_data ethnl
> ops, this causes crashes. The solution for that is to change the
> prototype of ethnl_req_get_phydev() to perform checks inside the helper
> (patch 1).
> 
> While investigating that, I realised that the notification path for PHYs
> is not correct anyways. As we don't have a netlink request to parse, we
> can't know for sure which PHY the notification event targets in the case
> of a notification following a ->set request.
> 
> Patch 2 introduces a context structure that is used between ->set
> requests and the followup notification, to keep track of the PHY that
> the original request targeted for the notification.
> 
> Thanks Parthiban for the report (not on netdev@ though).
> 
> Maxime
> 
> Maxime Chevallier (2):
>    net: ethtool: netlink: Allow NULL nlattrs when getting a phy_device
>    net: ethtool: netlink: Pass a context for default ethnl notifications
> 
>   net/ethtool/cabletest.c |  8 ++++----
>   net/ethtool/linkstate.c |  2 +-
>   net/ethtool/netlink.c   | 21 +++++++++++++++++----
>   net/ethtool/netlink.h   |  5 +++--
>   net/ethtool/phy.c       |  2 +-
>   net/ethtool/plca.c      |  6 +++---
>   net/ethtool/pse-pd.c    |  4 ++--
>   net/ethtool/stats.c     |  2 +-
>   net/ethtool/strset.c    |  2 +-
>   9 files changed, 33 insertions(+), 19 deletions(-)
> 
> --
> 2.48.1
> 

Re: [PATCH net 0/2] net: ethtool: netlink: Fix notifications for
Posted by Maxime Chevallier 9 months, 3 weeks ago
On Fri, 28 Feb 2025 06:19:18 +0000
<Parthiban.Veerasooran@microchip.com> wrote:

> Hi Maxime,
> 
> I did a quick test with your patches and it seems working fine without 
> kernel crash.
> 
> Best regards,
> Parthiban V

Thanks for testing, good to hear that this solves the issue :)

Maxime
Re: [PATCH net 0/2] net: ethtool: netlink: Fix notifications for
Posted by Maxime Chevallier 9 months, 3 weeks ago
On Thu, 27 Feb 2025 19:24:50 +0100
Maxime Chevallier <maxime.chevallier@bootlin.com> wrote:

Oops subject got truncated, should be :

net: ethtool: netlink: Fix notifications for PHY commands 

Maxime :(