From patchwork Wed Aug 3 21:58:35 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denis Kenzior X-Patchwork-Id: 9261383 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 C3D626089F for ; Wed, 3 Aug 2016 14:10:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B656E28491 for ; Wed, 3 Aug 2016 14:10:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AAFA928541; Wed, 3 Aug 2016 14:10:46 +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 4D25E28565 for ; Wed, 3 Aug 2016 14:10:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754482AbcHCOKi (ORCPT ); Wed, 3 Aug 2016 10:10:38 -0400 Received: from mail-oi0-f68.google.com ([209.85.218.68]:34495 "EHLO mail-oi0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756700AbcHCOK3 (ORCPT ); Wed, 3 Aug 2016 10:10:29 -0400 Received: by mail-oi0-f68.google.com with SMTP id a135so2322675oii.1 for ; Wed, 03 Aug 2016 07:10:28 -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=e6fx3PuyftP0OMd+YX2iKxa0mqyZMN0RYCkqqLMN7EY=; b=h1oJnh7RLTFW7rRnrEPioXp8rowQLcsKsp8CYQYRkAnsY9fYM60EBSxTFHj8qO3bZk al/t6AlA/6fm6JAmkF9mU8+e82sEupqmuTIGsHhK3umBZnW6Tagj+R7fLW6GUqVGl8LL NHE7XuYBxT0s6wvvCG7BWBE+29DJWc8BmTDOSQVtzf69k/88xzBNY6niqQ2PF0q/lryj 3XLwY5we+Me3pj8lUC8IkvdaLmP65F0fDfKQc02Si+cV0Oj/pzHx/w3/7a+F7srAYY36 nHpN2t9xhZoEKK+UnvJc9gbTCz53rcFhAxyL4amn8ZVGV23QhcPHxsozVTOr7WRXTn1B yZJg== 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=e6fx3PuyftP0OMd+YX2iKxa0mqyZMN0RYCkqqLMN7EY=; b=lCZUfAG9v5fVyuJRRIhS/svZBGJTkax9M/whhya7hytDQeje1ZW0eZCljGTFWAzEjS QzrFJ0r5g0gqWQ+5cIk4WgDM/Zvjcu9dW7fjh6CvWay/P16o8apKygs0jVWXRtxlXP8d dtBRHyvD2p9WCinkKKVlorGFTEtwyFq0s/2jl+bNFUpijoA+ldYwIAiG26NGc8xSWSgH cYr/E3XBkvRvzb65nRez063Y9vXueCZ8Hwb9ICj7EQNBkVar5L5pE0lzKFJNusO+2CQm mzLSX8BpoKDDYg/DDqBGBUkkdDBBbRKPDvdcfhDXllPlKarjn8shhHy13a4bTgwIlu+a goJg== X-Gm-Message-State: AEkoouvOo2yjtbO2GY78akFLw0L7aOC9LviD75C50zI4ZQ9i4AW5RtYCip0dznQyZzbbbQ== X-Received: by 10.157.17.169 with SMTP id v38mr39442495otf.11.1470232687434; Wed, 03 Aug 2016 06:58:07 -0700 (PDT) Received: from localhost.localdomain (cpe-70-114-247-242.austin.res.rr.com. [70.114.247.242]) by smtp.gmail.com with ESMTPSA id e195sm499971oic.21.2016.08.03.06.58.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 03 Aug 2016 06:58:06 -0700 (PDT) From: Denis Kenzior To: linux-wireless@vger.kernel.org Cc: Denis Kenzior Subject: [PATCH v3 3/3] core: Always notify when wireless netdev is removed Date: Wed, 3 Aug 2016 16:58:35 -0500 Message-Id: <1470261515-2830-4-git-send-email-denkenz@gmail.com> X-Mailer: git-send-email 2.7.3 In-Reply-To: <1470261515-2830-1-git-send-email-denkenz@gmail.com> References: <1470261515-2830-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 591c3ab..4fa7175 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)