diff --git a/net/ieee802154/nl-mac.c b/net/ieee802154/nl-mac.c index 74ef0a310af..1acde5af4b5 100644 --- a/net/ieee802154/nl-mac.c +++ b/net/ieee802154/nl-mac.c @@ -162,7 +162,8 @@ static struct net_device *ieee802154_nl_get_dev(struct genl_info *info) if (!dev) return NULL; - if (dev->type != ARPHRD_IEEE802154) { + if (dev->type != ARPHRD_IEEE802154 || !dev->ieee802154_ptr || + !ieee802154_mlme_ops(dev)) { dev_put(dev); return NULL; } @@ -437,7 +438,8 @@ 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) + if (idx < s_idx || dev->type != ARPHRD_IEEE802154 || + !dev->ieee802154_ptr || !ieee802154_mlme_ops(dev)) goto cont; if (ieee802154_nl_fill_iface(skb, NETLINK_CB(cb->skb).portid, @@ -771,7 +773,8 @@ 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) + if (idx < first_dev || dev->type != ARPHRD_IEEE802154 || + !dev->ieee802154_ptr || !ieee802154_mlme_ops(dev)) goto skip; data.ops = ieee802154_mlme_ops(dev);