Re: [RFC PATCH net-next v3 07/13] net: ethtool: Introduce a command to list PHYs on an interface

From: Maxime Chevallier
Date: Mon Dec 11 2023 - 06:07:56 EST


Hi Simon,

On Sat, 9 Dec 2023 17:04:57 +0000
Simon Horman <horms@xxxxxxxxxx> wrote:

> On Fri, Dec 01, 2023 at 05:36:57PM +0100, Maxime Chevallier wrote:
> > As we have the ability to track the PHYs connected to a net_device
> > through the link_topology, we can expose this list to userspace. This
> > allows userspace to use these identifiers for phy-specific commands and
> > take the decision of which PHY to target by knowing the link topology.
> >
> > Add PHY_GET and PHY_DUMP, which can be a filtered DUMP operation to list
> > devices on only one interface.
> >
> > Signed-off-by: Maxime Chevallier <maxime.chevallier@xxxxxxxxxxx>
>
> ...
>
> > diff --git a/net/ethtool/phy.c b/net/ethtool/phy.c
>
> ...
>
> > +static int ethnl_phy_dump_one_dev(struct sk_buff *skb, struct net_device *dev,
> > + struct netlink_callback *cb)
> > +{
> > + struct ethnl_phy_dump_ctx *ctx = (void *)cb->ctx;
> > + struct phy_req_info *pri = ctx->phy_req_info;
> > + struct phy_device_node *pdn;
> > + unsigned long index = 1;
> > + void *ehdr;
> > + int ret;
> > +
> > + pri->base.dev = dev;
> > +
> > + xa_for_each(&dev->link_topo.phys, index, pdn) {
> > + ehdr = ethnl_dump_put(skb, cb,
> > + ETHTOOL_MSG_PHY_GET_REPLY);
> > + if (!ehdr) {
> > + ret = -EMSGSIZE;
> > + break;
> > + }
> > +
> > + ret = ethnl_fill_reply_header(skb, dev,
> > + ETHTOOL_A_PHY_HEADER);
> > + if (ret < 0) {
> > + genlmsg_cancel(skb, ehdr);
> > + break;
> > + }
> > +
> > + memcpy(&pri->pdn, pdn, sizeof(*pdn));
> > + ret = ethnl_phy_fill_reply(&pri->base, skb);
> > +
> > + genlmsg_end(skb, ehdr);
> > + }
> > +
> > + return ret;
>
> Hi Maxime,
>
> I am unsure if this can happen (or if I flagged this before)
> but if the loop runs zero times then ret is uninitialised here.
>
> Flagged by Smatch

Ah true, let me also fix that in the next revision.

Thanks for the review,

Maxime