net/hsr: Fix NULL pointer dereference on incomplete hsr_newlink() params.
authorArvid Brodin <arvid.brodin@alten.se>
Fri, 4 Jul 2014 21:42:00 +0000 (23:42 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 8 Jul 2014 18:35:31 +0000 (11:35 -0700)
If none of the slave interfaces are specified, struct nlattr *data[] may
be NULL. Make sure to check for that.

While I'm at it, fix the horrible error messages displayed when only one
of the slave interfaces isn't specified.

Signed-off-by: Arvid Brodin <arvid.brodin@alten.se>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/hsr/hsr_netlink.c

index fbdf53f..a2c7e4c 100644 (file)
@@ -37,13 +37,17 @@ static int hsr_newlink(struct net *src_net, struct net_device *dev,
        struct net_device *link[2];
        unsigned char multicast_spec;
 
+       if (!data) {
+               netdev_info(dev, "HSR: No slave devices specified\n");
+               return -EINVAL;
+       }
        if (!data[IFLA_HSR_SLAVE1]) {
-               netdev_info(dev, "IFLA_HSR_SLAVE1 missing!\n");
+               netdev_info(dev, "HSR: Slave1 device not specified\n");
                return -EINVAL;
        }
        link[0] = __dev_get_by_index(src_net, nla_get_u32(data[IFLA_HSR_SLAVE1]));
        if (!data[IFLA_HSR_SLAVE2]) {
-               netdev_info(dev, "IFLA_HSR_SLAVE2 missing!\n");
+               netdev_info(dev, "HSR: Slave2 device not specified\n");
                return -EINVAL;
        }
        link[1] = __dev_get_by_index(src_net, nla_get_u32(data[IFLA_HSR_SLAVE2]));