Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8bf36862 authored by Keller, Jacob E's avatar Keller, Jacob E Committed by David S. Miller
Browse files

ethtool: ensure channel counts are within bounds during SCHANNELS



Add a sanity check to ensure that all requested channel sizes are within
bounds, which should reduce errors in driver implementation.

Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d4ab4286
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -1274,15 +1274,24 @@ static noinline_for_stack int ethtool_get_channels(struct net_device *dev,
static noinline_for_stack int ethtool_set_channels(struct net_device *dev,
						   void __user *useraddr)
{
	struct ethtool_channels channels;
	struct ethtool_channels channels, max;
	u32 max_rx_in_use = 0;

	if (!dev->ethtool_ops->set_channels)
	if (!dev->ethtool_ops->set_channels || !dev->ethtool_ops->get_channels)
		return -EOPNOTSUPP;

	if (copy_from_user(&channels, useraddr, sizeof(channels)))
		return -EFAULT;

	dev->ethtool_ops->get_channels(dev, &max);

	/* ensure new counts are within the maximums */
	if ((channels.rx_count > max.max_rx) ||
	    (channels.tx_count > max.max_tx) ||
	    (channels.combined_count > max.max_combined) ||
	    (channels.other_count > max.max_other))
		return -EINVAL;

	/* ensure the new Rx count fits within the configured Rx flow
	 * indirection table settings */
	if (netif_is_rxfh_configured(dev) &&