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

From: Simon Horman
Date: Sat Dec 09 2023 - 12:05:09 EST


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

> +}

...