All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jakub Kicinski <kuba@kernel.org>
To: Breno Leitao <leitao@debian.org>
Cc: "Andrew Lunn" <andrew@lunn.ch>,
	"David S. Miller" <davem@davemloft.net>,
	"Eric Dumazet" <edumazet@google.com>,
	"Paolo Abeni" <pabeni@redhat.com>,
	"Simon Horman" <horms@kernel.org>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Jason Wang" <jasowang@redhat.com>,
	"Xuan Zhuo" <xuanzhuo@linux.alibaba.com>,
	"Eugenio Pérez" <eperezma@redhat.com>,
	"Andrew Lunn" <andrew+netdev@lunn.ch>,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	virtualization@lists.linux.dev, jdamato@fastly.com,
	kernel-team@meta.com
Subject: Re: [PATCH RFC net-next 4/7] net: ethtool: add get_rxrings callback to optimize RX ring queries
Date: Fri, 5 Sep 2025 16:42:53 -0700	[thread overview]
Message-ID: <20250905164253.4e9902d2@kernel.org> (raw)
In-Reply-To: <20250905-gxrings-v1-4-984fc471f28f@debian.org>

On Fri, 05 Sep 2025 10:07:23 -0700 Breno Leitao wrote:
> +	int	(*get_rxrings)(struct net_device *dev);

I think this can return u32..
The drivers can't possibly fail to know how many queues they have.
We already do that for get_rxfh_*_size callbacks

>  	void	(*get_pause_stats)(struct net_device *dev,
>  				   struct ethtool_pause_stats *pause_stats);
>  	void	(*get_pauseparam)(struct net_device *,
> diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c
> index 1a9ad47f60313..2f3dbef9eb712 100644
> --- a/net/ethtool/ioctl.c
> +++ b/net/ethtool/ioctl.c
> @@ -1208,6 +1208,22 @@ static noinline_for_stack int ethtool_set_rxnfc(struct net_device *dev,
>  	return 0;
>  }
>  
> +static int get_num_rxrings(struct net_device *dev)

This one has to indeed keep returning int, until we get rid of
get_rxnfc fallback completely.

> +{
> +	const struct ethtool_ops *ops = dev->ethtool_ops;
> +	struct ethtool_rxnfc rx_rings;
> +	int ret;
> +
> +	if (ops->get_rxrings)
> +		return ops->get_rxrings(dev);
> +
> +	ret = ops->get_rxnfc(dev, &rx_rings, NULL);
> +	if (ret < 0)
> +		return ret;
> +
> +	return rx_rings.data;
> +}
> +
>  static noinline_for_stack int ethtool_get_rxrings(struct net_device *dev,
>  						  u32 cmd,
>  						  void __user *useraddr)
> @@ -1217,16 +1233,17 @@ static noinline_for_stack int ethtool_get_rxrings(struct net_device *dev,
>  	const struct ethtool_ops *ops = dev->ethtool_ops;
>  	int ret;
>  
> -	if (!ops->get_rxnfc)
> +	if (!ops->get_rxnfc && !ops->get_rxrings)
>  		return -EOPNOTSUPP;
>  
>  	ret = ethtool_rxnfc_copy_struct(cmd, &info, &info_size, useraddr);
>  	if (ret)
>  		return ret;
>  
> -	ret = ops->get_rxnfc(dev, &info, NULL);
> -	if (ret < 0)
> -		return ret;
> +	if (WARN_ON_ONCE(info.cmd != ETHTOOL_GRXRINGS))
> +		return -EOPNOTSUPP;

I think malicious user space can trigger this warning with a TOCTOU
race. Let's skip the check, it's not really needed?

> +	info.data = get_num_rxrings(dev);

  reply	other threads:[~2025-09-05 23:42 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-05 17:07 [PATCH RFC net-next 0/7] net: ethtool: add dedicated GRXRINGS driver callbacks Breno Leitao
2025-09-05 17:07 ` [PATCH RFC net-next 1/7] net: ethtool: pass the num of RX rings directly to ethtool_copy_validate_indir Breno Leitao
2025-09-05 17:07 ` [PATCH RFC net-next 2/7] net: ethtool: add support for ETHTOOL_GRXRINGS ioctl Breno Leitao
2025-09-05 17:07 ` [PATCH RFC net-next 3/7] net: ethtool: remove the duplicated handling from ethtool_get_rxrings Breno Leitao
2025-09-05 17:07 ` [PATCH RFC net-next 4/7] net: ethtool: add get_rxrings callback to optimize RX ring queries Breno Leitao
2025-09-05 23:42   ` Jakub Kicinski [this message]
2025-09-05 23:44     ` Jakub Kicinski
2025-09-08 11:51   ` Simon Horman
2025-09-05 17:07 ` [PATCH RFC net-next 5/7] net: ethtool: update set_rxfh to use get_num_rxrings helper Breno Leitao
2025-09-05 17:07 ` [PATCH RFC net-next 6/7] net: ethtool: update set_rxfh_indir " Breno Leitao
2025-09-05 17:07 ` [PATCH RFC net-next 7/7] net: virtio_net: add get_rxrings ethtool callback for RX ring queries Breno Leitao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250905164253.4e9902d2@kernel.org \
    --to=kuba@kernel.org \
    --cc=andrew+netdev@lunn.ch \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=eperezma@redhat.com \
    --cc=horms@kernel.org \
    --cc=jasowang@redhat.com \
    --cc=jdamato@fastly.com \
    --cc=kernel-team@meta.com \
    --cc=leitao@debian.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=virtualization@lists.linux.dev \
    --cc=xuanzhuo@linux.alibaba.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.