summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikolay Aleksandrov <nikolay@cumulusnetworks.com>2016-02-07 21:52:24 +0100
committerDavid S. Miller <davem@davemloft.net>2016-02-11 17:55:38 +0100
commit0cf3ace9e7cb47e3173561a8fb2601a12d8f75d2 (patch)
tree461c6b81ea51b25e40d6f7b51ff520e9e1f134f4
parentethtool: make validate_speed accept all speeds between 0 and INT_MAX (diff)
downloadlinux-0cf3ace9e7cb47e3173561a8fb2601a12d8f75d2.tar.xz
linux-0cf3ace9e7cb47e3173561a8fb2601a12d8f75d2.zip
virtio_net: validate ethtool port setting and explain the user validation
We should validate the port setting that we got from the user and check if it's what we've set it to (PORT_OTHER), also add explanation that ignoring advertising is good as long as we don't have autonegotiation. Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/virtio_net.c6
1 files changed, 4 insertions, 2 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));