diff options
author | Ben Hutchings <ben@decadent.org.uk> | 2014-05-15 00:46:45 +0100 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2014-05-19 01:17:32 +0100 |
commit | fb95cd8d1473b1cc90eccbd6a30641f3851c8506 (patch) | |
tree | d6e22b245809be974c3a3ac95d33fe24c16c7e09 /net/core | |
parent | eb02a272c97b6e25d8e5fcf1ea93923e6f155595 (diff) | |
download | linux-fb95cd8d1473b1cc90eccbd6a30641f3851c8506.tar.bz2 |
ethtool: Return immediately on error in ethtool_copy_validate_indir()
We must return -EFAULT immediately rather than continuing into
the loop.
Similarly, we may as well return -EINVAL directly.
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/ethtool.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/net/core/ethtool.c b/net/core/ethtool.c index aa8978ac47d2..c834cb29f682 100644 --- a/net/core/ethtool.c +++ b/net/core/ethtool.c @@ -561,19 +561,17 @@ static int ethtool_copy_validate_indir(u32 *indir, void __user *useraddr, struct ethtool_rxnfc *rx_rings, u32 size) { - int ret = 0, i; + int i; if (copy_from_user(indir, useraddr, size * sizeof(indir[0]))) - ret = -EFAULT; + return -EFAULT; /* Validate ring indices */ - for (i = 0; i < size; i++) { - if (indir[i] >= rx_rings->data) { - ret = -EINVAL; - break; - } - } - return ret; + for (i = 0; i < size; i++) + if (indir[i] >= rx_rings->data) + return -EINVAL; + + return 0; } static noinline_for_stack int ethtool_get_rxfh_indir(struct net_device *dev, |