From: Jerome Pouiller <Jerome.Pouiller@silabs.com>
To: devel@driverdev.osuosl.org, linux-wireless@vger.kernel.org
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Kalle Valo" <kvalo@codeaurora.org>,
"David S . Miller" <davem@davemloft.net>,
"Jérôme Pouiller" <jerome.pouiller@silabs.com>
Subject: [PATCH 01/19] staging: wfx: fix race between configure_filter and remove_interface
Date: Fri, 10 Apr 2020 15:32:21 +0200 [thread overview]
Message-ID: <20200410133239.438347-2-Jerome.Pouiller@silabs.com> (raw)
In-Reply-To: <20200410133239.438347-1-Jerome.Pouiller@silabs.com>
From: Jérôme Pouiller <jerome.pouiller@silabs.com>
wfx_remove_interface() and wfx_configure_filter() can be run
concurrently. Therefore, this patch protect access to the list of
interfaces from wfx_configure_filter().
Notice that wfx_configure_filter() now lock "conf_lock" and "scan_lock".
Beside that, wfx_hw_scan_work() also access to the same locks. So we
have to lock them in same order to avoid any deadlock.
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
drivers/staging/wfx/scan.c | 4 ++--
drivers/staging/wfx/sta.c | 2 ++
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/wfx/scan.c b/drivers/staging/wfx/scan.c
index 6e1e50048651..0c7f4eef045c 100644
--- a/drivers/staging/wfx/scan.c
+++ b/drivers/staging/wfx/scan.c
@@ -86,8 +86,8 @@ void wfx_hw_scan_work(struct work_struct *work)
struct ieee80211_scan_request *hw_req = wvif->scan_req;
int chan_cur, ret;
- mutex_lock(&wvif->scan_lock);
mutex_lock(&wvif->wdev->conf_mutex);
+ mutex_lock(&wvif->scan_lock);
update_probe_tmpl(wvif, &hw_req->req);
wfx_fwd_probe_req(wvif, true);
chan_cur = 0;
@@ -96,8 +96,8 @@ void wfx_hw_scan_work(struct work_struct *work)
if (ret > 0)
chan_cur += ret;
} while (ret > 0 && chan_cur < hw_req->req.n_channels);
- mutex_unlock(&wvif->wdev->conf_mutex);
mutex_unlock(&wvif->scan_lock);
+ mutex_unlock(&wvif->wdev->conf_mutex);
__ieee80211_scan_completed_compat(wvif->wdev->hw, ret < 0);
}
diff --git a/drivers/staging/wfx/sta.c b/drivers/staging/wfx/sta.c
index 4d5dbfc24f52..380e5319472a 100644
--- a/drivers/staging/wfx/sta.c
+++ b/drivers/staging/wfx/sta.c
@@ -242,6 +242,7 @@ void wfx_configure_filter(struct ieee80211_hw *hw,
*total_flags &= FIF_OTHER_BSS | FIF_FCSFAIL | FIF_PROBE_REQ;
+ mutex_lock(&wdev->conf_mutex);
while ((wvif = wvif_iterate(wdev, wvif)) != NULL) {
mutex_lock(&wvif->scan_lock);
wvif->filter_bssid = (*total_flags &
@@ -251,6 +252,7 @@ void wfx_configure_filter(struct ieee80211_hw *hw,
wfx_update_filtering(wvif);
mutex_unlock(&wvif->scan_lock);
}
+ mutex_unlock(&wdev->conf_mutex);
}
static int wfx_update_pm(struct wfx_vif *wvif)
--
2.25.1
next prev parent reply other threads:[~2020-04-10 13:33 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-10 13:32 [PATCH 00/19] staging: wfx: simplify start/shutdown of RF Jerome Pouiller
2020-04-10 13:32 ` Jerome Pouiller [this message]
2020-04-10 13:32 ` [PATCH 02/19] staging: wfx: reduce hold duration of cfg80211_bss Jerome Pouiller
2020-04-10 13:32 ` [PATCH 03/19] staging: wfx: call wfx_do_unjoin() synchronously Jerome Pouiller
2020-04-10 13:32 ` [PATCH 04/19] staging: wfx: implement start_ap/stop_ap Jerome Pouiller
2020-04-10 13:32 ` [PATCH 05/19] staging: wfx: set all parameters before starting AP Jerome Pouiller
2020-04-10 13:32 ` [PATCH 06/19] staging: wfx: change the way the station associate to an AP Jerome Pouiller
2020-04-10 13:32 ` [PATCH 07/19] staging: wfx: remove useless call to wfx_tx_flush() Jerome Pouiller
2020-04-10 13:32 ` [PATCH 08/19] staging: wfx: fix support for BSS_CHANGED_KEEP_ALIVE Jerome Pouiller
2020-04-10 13:32 ` [PATCH 09/19] staging: wfx: disabling keep alive during unjoin is useless Jerome Pouiller
2020-04-10 13:32 ` [PATCH 10/19] staging: wfx: drop unnecessary condition checks in wfx_upload_ap_templates() Jerome Pouiller
2020-04-10 13:32 ` [PATCH 11/19] staging: wfx: request to send beacons in IBSS mode Jerome Pouiller
2020-04-10 13:32 ` [PATCH 12/19] staging: wfx: remove unnecessary conditions in wfx_bss_info_changed() Jerome Pouiller
2020-04-10 13:32 ` [PATCH 13/19] staging: wfx: avoid duplicate updating of beacon template Jerome Pouiller
2020-04-10 13:32 ` [PATCH 14/19] staging: wfx: allow to join IBSS networks Jerome Pouiller
2020-04-10 13:32 ` [PATCH 15/19] staging: wfx: introduce wfx_join_ibss() and wfx_leave_ibss() Jerome Pouiller
2020-04-10 13:32 ` [PATCH 16/19] staging: wfx: re-enable BA after reset Jerome Pouiller
2020-04-10 13:32 ` [PATCH 17/19] staging: wfx: check value of beacon_int Jerome Pouiller
2020-04-10 13:32 ` [PATCH 18/19] staging: wfx: drop unused attribute 'beacon_int' Jerome Pouiller
2020-04-10 13:32 ` [PATCH 19/19] staging: wfx: drop useless update of macaddr Jerome Pouiller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200410133239.438347-2-Jerome.Pouiller@silabs.com \
--to=jerome.pouiller@silabs.com \
--cc=davem@davemloft.net \
--cc=devel@driverdev.osuosl.org \
--cc=gregkh@linuxfoundation.org \
--cc=kvalo@codeaurora.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®