Re: [PATCH v2 0/2] Bluetooth: Lock nesting for L2CAP channels and sockets

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Johan,

> v2 has minor fixes to a code comment in patch 1/2 and the commit message
> of patch 2/2.
> 
> From the original cover letter:
> 
> I've spent the last few days fighting with all sorts of lockdep warnings
> in the Bluetooth subsystem. A lot of them come from the fact that we
> have cross-channel access for L2CAP channels. This ends up looking
> suspicious to lockdep unless we help out a bit by adding nesting level
> annotations.
> 
> It seems like we need at least three distinct nesting levels: SMP
> channels, "normal" channels, and parent/listening channels. This is
> because the parent channel lock may be held while also taking the lock
> of child channels, and the SMP channel may be accessed while holding the
> lock of any other channel (e.g. to request security level elevation).
> 
> We could in theory identify the type of channel in question implicitly
> by inspecting the channel in the l2cap_chan_lock function, however this
> is problematic since accessing channel data would usually already
> require holding the channel lock (not to mention that the logic for
> selecting the needed nesting level wouldn't be completely trivial).
> 
> A simpler (imo) solution that I've gone for is to introduce a new
> "atomic_t nesting" channel member which contains the necessary nesting
> level and is set as soon as the level is known (i.e. initialized to
> "normal" upon channel creation or set to one of the two other levels
> when creating the SMP chan in smp.c or when setting chan->state to
> BT_LISTEN).
> 
> The second patch contains a long needed fix for l2cap_sock_teardown_cb
> which only got a half-fix earlier this week (also from me) for its
> locking. This function gets called for all types of channels so it can't
> have a hard-coded nesting level for the socket lock. Instead I've opted
> for the socket lock inheriting the chan level and then also using that
> for the two other places calling lock_sock_nested() to be consistent.
> 
> Johan
> 
> ----------------------------------------------------------------
> Johan Hedberg (2):
>      Bluetooth: Use proper nesting annotation for l2cap_chan lock
>      Bluetooth: Fix L2CAP socket lock nesting level
> 
> include/net/bluetooth/l2cap.h | 15 ++++++++++++++-
> net/bluetooth/l2cap_sock.c    | 22 +++++++++++++++++++---
> net/bluetooth/smp.c           | 10 ++++++++++
> 3 files changed, 43 insertions(+), 4 deletions(-)

both patches have been applied to bluetooth-next tree.

Regards

Marcel

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux