summaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorBen Hutchings <ben@decadent.org.uk>2014-05-15 00:46:45 +0100
committerBen Hutchings <ben@decadent.org.uk>2014-05-19 01:17:32 +0100
commitfb95cd8d1473b1cc90eccbd6a30641f3851c8506 (patch)
treed6e22b245809be974c3a3ac95d33fe24c16c7e09 /net/core
parenteb02a272c97b6e25d8e5fcf1ea93923e6f155595 (diff)
downloadlinux-0-day-fb95cd8d1473b1cc90eccbd6a30641f3851c8506.tar.gz
linux-0-day-fb95cd8d1473b1cc90eccbd6a30641f3851c8506.tar.xz
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.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index aa8978ac47d28..c834cb29f6821 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,