Skip to content

Commit

Permalink
ethtool: ensure channel counts are within bounds during SCHANNELS
Browse files Browse the repository at this point in the history
Add a sanity check to ensure that all requested channel sizes are within
bounds, which should reduce errors in driver implementation.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Keller, Jacob E authored and David S. Miller committed Feb 16, 2016
1 parent d4ab428 commit 8bf3686
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions net/core/ethtool.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) &&
Expand Down

0 comments on commit 8bf3686

Please sign in to comment.