For wireless device objects with an associated netdev, the DEL_INTERFACE event is generated inside the netdev notifier. The event is generated regardless of whether it was due to a NL80211_CMD_DEL_INTERFACE call from userspace or if the netdev was destroyed by other means. If NL80211_CMD_DEL_INTERFACE handler is called, then a duplicate DEL_INTERFACE event will be multicast. This change modifies the logic inside nl80211_del_interface to avoid this. --- net/wireless/nl80211.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index ec8eb88..a65c271 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -2913,7 +2913,17 @@ static int nl80211_del_interface(struct sk_buff *skb, struct genl_info *info) if (!rdev->ops->del_virtual_intf) return -EOPNOTSUPP; - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); + /* + * For wdevs which have no associated netdev object (e.g. of type + * NL80211_IFTYPE_P2P_DEVICE), emit the DEL_INTERFACE event here. + * For all other types, the event will be generated from the + * netdev notifier + */ + if (!wdev->netdev) + msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); + else + msg = NULL; + if (msg && nl80211_send_iface(msg, 0, 0, 0, rdev, wdev, true) < 0) { nlmsg_free(msg); msg = NULL; -- 2.7.3 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html