From: William McVicker <willmcvicker@google.com>
To: Jeff Johnson <quic_jjohnson@quicinc.com>
Cc: Johannes Berg <johannes@sipsolutions.net>,
linux-wireless@vger.kernel.org,
Marek Szyprowski <m.szyprowski@samsung.com>
Subject: Re: [BUG] deadlock in nl80211_vendor_cmd
Date: Tue, 22 Mar 2022 21:58:45 +0000 [thread overview]
Message-ID: <YjpGlRvcg72zNo8s@google.com> (raw)
In-Reply-To: <5d5cf050-7de0-7bad-2407-276970222635@quicinc.com>
On 03/22/2022, Jeff Johnson wrote:
> On 3/21/2022 1:07 PM, Johannes Berg wrote:
> [..snip..]
>
> > > I'm not an networking expert. So my main question is if I'm allowed to take
> > > the RTNL lock inside the nl80211_vendor_cmd callbacks?
> >
> > Evidently, you're not. It's interesting though, it used to be that we
> > called these with the RTNL held, now we don't, and the driver you're
> > using somehow "got fixed" to take it, but whoever fixed it didn't take
> > into account that this is not possible?
>
> On this point I just want to remind that prior to the locking change that a
> driver would specify on a per-vendor command basis whether or not it wanted
> the rtnl_lock to be held via NL80211_FLAG_NEED_RTNL. I'm guessing for the
> command in question the driver did not set this flag since the driver wanted
> to explicitly take the lock itself, otherwise it would have deadlocked on
> itself with the 5.10 kernel.
>
> /jeff
On the 5.10 kernel, the core kernel sets NL80211_FLAG_NEED_RTNL as part of
the internal_flags for NL80211_CMD_VENDOR:
net/wireless/nl80211.c:
{
.cmd = NL80211_CMD_VENDOR,
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
.doit = nl80211_vendor_cmd,
.dumpit = nl80211_vendor_cmd_dump,
.flags = GENL_UNS_ADMIN_PERM,
.internal_flags = NL80211_FLAG_NEED_WIPHY |
NL80211_FLAG_NEED_RTNL |
NL80211_FLAG_CLEAR_SKB,
},
So the 5.10 version of this driver doesn't need to directly call rtnl_lock()
within the vendor command doit() functions since pre_doit() handles the RTNL
locking.
It would be nice if nl80211_vendor_cmd() could support taking the RTNL lock if
requested via the vendor flags. That would require moving the wiphy lock to
nl80211_vendor_cmds() so that it could take the RTNL and wiphy lock in the
correct order. Is that something you'd be open to Johannes?
--Will
next prev parent reply other threads:[~2022-03-22 21:58 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-17 17:09 [BUG] deadlock in nl80211_vendor_cmd willmcvicker
[not found] ` <CABYd82Z=YXmZPTQhf0K1M4nS2wk3dPBSqx91D8SoUd59AUzpHg@mail.gmail.com>
2022-03-21 17:00 ` William McVicker
2022-03-21 20:07 ` Johannes Berg
2022-03-22 0:15 ` William McVicker
2022-03-22 21:31 ` Jeff Johnson
2022-03-22 21:58 ` William McVicker [this message]
2022-03-23 16:06 ` Jeff Johnson
2022-03-24 21:58 ` William McVicker
2022-03-25 12:04 ` Johannes Berg
2022-03-25 12:06 ` Johannes Berg
2022-03-25 16:49 ` Jakub Kicinski
2022-03-25 17:01 ` Johannes Berg
2022-03-25 18:08 ` William McVicker
2022-03-25 20:21 ` Johannes Berg
2022-03-25 20:36 ` William McVicker
2022-03-25 21:16 ` Johannes Berg
2022-03-25 21:54 ` Johannes Berg
2022-03-25 22:18 ` Jeff Johnson
2022-03-25 23:57 ` William McVicker
2022-03-26 0:07 ` Jakub Kicinski
2022-03-26 0:12 ` William McVicker
2022-03-25 20:40 ` Jakub Kicinski
2022-03-25 21:25 ` Johannes Berg
2022-03-25 21:48 ` Jakub Kicinski
2022-03-25 21:50 ` Johannes Berg
2022-03-25 12:09 ` Johannes Berg
2022-03-25 15:59 ` Jeff Johnson
2022-03-25 16:04 ` Johannes Berg
2022-03-25 17:14 ` Jeff Johnson
2022-03-25 12:08 ` Johannes Berg
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=YjpGlRvcg72zNo8s@google.com \
--to=willmcvicker@google.com \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=quic_jjohnson@quicinc.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.