From patchwork Sat Jul 9 06:16:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 9221845 X-Patchwork-Delegate: johannes@sipsolutions.net Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 8E3D56089D for ; Fri, 8 Jul 2016 22:30:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7E26F28335 for ; Fri, 8 Jul 2016 22:30:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 723DE285E0; Fri, 8 Jul 2016 22:30:16 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.8 required=2.0 tests=BAYES_00, DATE_IN_FUTURE_06_12, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,FREEMAIL_FROM,RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 18BD728335 for ; Fri, 8 Jul 2016 22:30:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756356AbcGHWaP (ORCPT ); Fri, 8 Jul 2016 18:30:15 -0400 Received: from mail-oi0-f67.google.com ([209.85.218.67]:35988 "EHLO mail-oi0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756307AbcGHWaN (ORCPT ); Fri, 8 Jul 2016 18:30:13 -0400 Received: by mail-oi0-f67.google.com with SMTP id u68so401487oie.3 for ; Fri, 08 Jul 2016 15:30:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Lfl23y/2GKTZO8dh8AQX5IfigfrPKHnxpvcJCGExqzc=; b=E8ce0t2leCs70JdnXZOnAzb2OKulPE61SUEBzdkyFTzgx6OSHMyOhEPUNpXAWqzreD Pbxyacycj2vc9afgYiY4ywL+cC9Y+CHADb4BcKvoKvawqFy5z+c9XziYn0qg0peBUc4g 1/prpCbgX2qlcb/zpMjb/4UCXNaE9KsKT64KI4ho7SlHY1fxBMLFCbt1AgCg4Uua4xvF 6NsvYVreV7gLBWpw0zQt1pp9JVt8f7/VFMyqjrqO0+6CzUlNbgdiqLuL/bPfqixGlmqX fyczBMdyfsEbXgq1pVxQG5c8MZ/q7+X5oLb1rOCWivEw+IFBe3YVD5lR8JxpFZKTWcBn PDJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=Lfl23y/2GKTZO8dh8AQX5IfigfrPKHnxpvcJCGExqzc=; b=ThzemcRdPdSkXFA4CxnyyKl4d+xTUUR2A6vOZGFSeI6AxCLV1OW+7MARDhbCfP2caI Gtn7NlgkhIAM2CyEk2r9TLhNdQBQ4PwSToXAjSFF9jTbJ3CoBDSzi8LYZ6edO9ouwnNr 1kCN2Bmt3gEHYCf+puDN+ETejUtPB+v80q10kqee5OOlX72BQ0cQlm+fKEU5xLFz3bPk +Si8XinK73SNnanXKIpoGrs9W1ZyEaWB5Ce4Aq/XBvDoPH+MjK4vRwxkp6RqQ8oxZiof Rqy0j+z3Yke0lUR841yVY97/6juVDgOYOWxcKFU4rq4TF1G5aE+Y4bpyFNYMHr6oPHBa 5BBA== X-Gm-Message-State: ALyK8tI+tvcGsDuM2Pa/33unrixbG2Hv4tGxSw6FkgEWx2LhAEC3wHtSo4fSoplLoQYsVQ== X-Received: by 10.157.31.117 with SMTP id x50mr4250222otx.78.1468016158155; Fri, 08 Jul 2016 15:15:58 -0700 (PDT) Received: from iwd-test.home ([99.198.216.198]) by smtp.gmail.com with ESMTPSA id 9sm227560oth.15.2016.07.08.15.15.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 08 Jul 2016 15:15:57 -0700 (PDT) From: Denis Kenzior To: linux-wireless@vger.kernel.org Cc: Denis Kenzior Subject: [RFC v2 3/3] core: Always notify when wireless netdev is removed Date: Sat, 9 Jul 2016 01:16:07 -0500 Message-Id: <1468044967-9236-4-git-send-email-denkenz@gmail.com> X-Mailer: git-send-email 2.7.3 In-Reply-To: <1468044967-9236-1-git-send-email-denkenz@gmail.com> References: <1468044967-9236-1-git-send-email-denkenz@gmail.com> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This change alters the semantics of NL80211_CMD_DEL_INTERFACE events by always sending this event whenever a net_device object associated with a wdev is destroyed. Prior to this change, this event was only emitted as a result of NL80211_CMD_DEL_INTERFACE command sent from userspace. This allows userspace to reliably detect when wireless interfaces have been removed, e.g. due to USB removal events, etc. For wireless device objects without an associated net_device (e.g. NL80211_IFTYPE_P2P_DEVICE), the NL80211_CMD_DEL_INTERFACE event is now generated inside cfg80211_unregister_wdev. Signed-off-by: Denis Kenzior --- net/wireless/core.c | 4 ++++ net/wireless/nl80211.c | 18 +----------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/net/wireless/core.c b/net/wireless/core.c index 7758c0f..fccead7 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c @@ -906,6 +906,8 @@ void cfg80211_unregister_wdev(struct wireless_dev *wdev) if (WARN_ON(wdev->netdev)) return; + nl80211_notify_iface(rdev, wdev, NL80211_CMD_DEL_INTERFACE); + list_del_rcu(&wdev->list); rdev->devlist_generation++; @@ -1159,6 +1161,8 @@ static int cfg80211_netdev_notifier_call(struct notifier_block *nb, * remove and clean it up. */ if (!list_empty(&wdev->list)) { + nl80211_notify_iface(rdev, wdev, + NL80211_CMD_DEL_INTERFACE); sysfs_remove_link(&dev->dev.kobj, "phy80211"); list_del_rcu(&wdev->list); rdev->devlist_generation++; diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index ec8eb88..bc45d8a 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -2907,18 +2907,10 @@ static int nl80211_del_interface(struct sk_buff *skb, struct genl_info *info) { struct cfg80211_registered_device *rdev = info->user_ptr[0]; struct wireless_dev *wdev = info->user_ptr[1]; - struct sk_buff *msg; - int status; if (!rdev->ops->del_virtual_intf) return -EOPNOTSUPP; - msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (msg && nl80211_send_iface(msg, 0, 0, 0, rdev, wdev, true) < 0) { - nlmsg_free(msg); - msg = NULL; - } - /* * If we remove a wireless device without a netdev then clear * user_ptr[1] so that nl80211_post_doit won't dereference it @@ -2929,15 +2921,7 @@ static int nl80211_del_interface(struct sk_buff *skb, struct genl_info *info) if (!wdev->netdev) info->user_ptr[1] = NULL; - status = rdev_del_virtual_intf(rdev, wdev); - if (status >= 0 && msg) - genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), - msg, 0, NL80211_MCGRP_CONFIG, - GFP_KERNEL); - else - nlmsg_free(msg); - - return status; + return rdev_del_virtual_intf(rdev, wdev); } static int nl80211_set_noack_map(struct sk_buff *skb, struct genl_info *info)