ieee802154: fix iface dump with lowpan
authorAlexander Aring <alex.aring@gmail.com>
Sun, 9 Nov 2014 07:36:58 +0000 (08:36 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Sun, 9 Nov 2014 18:50:29 +0000 (19:50 +0100)
This patch adds a hacked solution for an interface dump with a running
lowpan interface. This will crash because lowpan and wpan interface use
the same arphdr. To change the arphdr will change the UAPI, this patch
checks on mtu which should on lowpan interface always different than
IEEE802154_MTU.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/ieee802154/nl-mac.c

index 50e9863823a5035f78fc209260991a3da31a2ddb..fe77f0c770b810b77b86fbbd089c440e76e02516 100644 (file)
@@ -166,7 +166,10 @@ static struct net_device *ieee802154_nl_get_dev(struct genl_info *info)
        if (!dev)
                return NULL;
 
-       if (dev->type != ARPHRD_IEEE802154) {
+       /* Check on mtu is currently a hacked solution because lowpan
+        * and wpan have the same ARPHRD type.
+        */
+       if (dev->type != ARPHRD_IEEE802154 || dev->mtu != IEEE802154_MTU) {
                dev_put(dev);
                return NULL;
        }
@@ -448,7 +451,11 @@ int ieee802154_dump_iface(struct sk_buff *skb, struct netlink_callback *cb)
 
        idx = 0;
        for_each_netdev(net, dev) {
-               if (idx < s_idx || (dev->type != ARPHRD_IEEE802154))
+               /* Check on mtu is currently a hacked solution because lowpan
+                * and wpan have the same ARPHRD type.
+                */
+               if (idx < s_idx || dev->type != ARPHRD_IEEE802154 ||
+                   dev->mtu != IEEE802154_MTU)
                        goto cont;
 
                if (ieee802154_nl_fill_iface(skb, NETLINK_CB(cb->skb).portid,
@@ -782,7 +789,11 @@ ieee802154_llsec_dump_table(struct sk_buff *skb, struct netlink_callback *cb,
        int rc;
 
        for_each_netdev(net, dev) {
-               if (idx < first_dev || dev->type != ARPHRD_IEEE802154)
+               /* Check on mtu is currently a hacked solution because lowpan
+                * and wpan have the same ARPHRD type.
+                */
+               if (idx < first_dev || dev->type != ARPHRD_IEEE802154 ||
+                   dev->mtu != IEEE802154_MTU)
                        goto skip;
 
                data.ops = ieee802154_mlme_ops(dev);