diff options
author | David S. Miller <davem@davemloft.net> | 2016-02-11 19:55:51 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-02-11 19:55:51 +0300 |
commit | 18ac5590e9e37a423c4d26a83b657fcf2b832d5a (patch) | |
tree | 461c6b81ea51b25e40d6f7b51ff520e9e1f134f4 | |
parent | 83840f5b31851386a038781e272d928300754283 (diff) | |
parent | 0cf3ace9e7cb47e3173561a8fb2601a12d8f75d2 (diff) | |
download | linux-18ac5590e9e37a423c4d26a83b657fcf2b832d5a.tar.xz |
Merge branch 'virtio_net-ethtool-validation'
Nikolay Aleksandrov says:
====================
virtio_net: better ethtool setting validation
This small set is a follow-up for the recent patches that added ethtool
get/set settings. Patch 1 changes the speed validation routine to check
if the speed is between 0 and INT_MAX (or SPEED_UNKNOWN) and patch 2 adds
port validation to virtio_net and better validation comment.
This set is on top of Michael's patch which explains that speeds from 0
to INT_MAX are valid:
http://patchwork.ozlabs.org/patch/578911/
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/virtio_net.c | 6 | ||||
-rw-r--r-- | include/uapi/linux/ethtool.h | 19 |
2 files changed, 5 insertions, 20 deletions
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index c9fd52a8e6ec..fb0eae42bf39 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -1386,11 +1386,13 @@ static bool virtnet_validate_ethtool_cmd(const struct ethtool_cmd *cmd) struct ethtool_cmd diff1 = *cmd; struct ethtool_cmd diff2 = {}; - /* advertising and cmd are usually set, ignore port because we set it */ + /* cmd is always set so we need to clear it, validate the port type + * and also without autonegotiation we can ignore advertising + */ ethtool_cmd_speed_set(&diff1, 0); + diff2.port = PORT_OTHER; diff1.advertising = 0; diff1.duplex = 0; - diff1.port = 0; diff1.cmd = 0; return !memcmp(&diff1, &diff2, sizeof(diff1)); diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h index 4345f80a2e33..190aea0faaf4 100644 --- a/include/uapi/linux/ethtool.h +++ b/include/uapi/linux/ethtool.h @@ -1377,24 +1377,7 @@ enum ethtool_sfeatures_retval_bits { static inline int ethtool_validate_speed(__u32 speed) { - switch (speed) { - case SPEED_10: - case SPEED_100: - case SPEED_1000: - case SPEED_2500: - case SPEED_5000: - case SPEED_10000: - case SPEED_20000: - case SPEED_25000: - case SPEED_40000: - case SPEED_50000: - case SPEED_56000: - case SPEED_100000: - case SPEED_UNKNOWN: - return 1; - } - - return 0; + return speed <= INT_MAX || speed == SPEED_UNKNOWN; } /* Duplex, half or full. */ |