mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-06 06:21:31 +00:00
Bluetooth: Use proper nesting annotation for l2cap_chan lock
By default lockdep considers all L2CAP channels equal. This would mean that we get warnings if a channel is locked when another one's lock is tried to be acquired in the same thread. This kind of inter-channel locking dependencies exist in the form of parent-child channels as well as any channel wishing to elevate the security by requesting procedures on the SMP channel. To eliminate the chance for these lockdep warnings we introduce a nesting level for each channel and use that when acquiring the channel lock. For now there exists the earlier mentioned three identified categories: SMP, "normal" channels and parent channels (i.e. those in BT_LISTEN state). The nesting level is defined as atomic_t since we need access to it before the lock is actually acquired. Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
24ccb9f4f7
commit
abe84903a8
3 changed files with 33 additions and 1 deletions
|
@ -285,6 +285,12 @@ static int l2cap_sock_listen(struct socket *sock, int backlog)
|
|||
sk->sk_max_ack_backlog = backlog;
|
||||
sk->sk_ack_backlog = 0;
|
||||
|
||||
/* Listening channels need to use nested locking in order not to
|
||||
* cause lockdep warnings when the created child channels end up
|
||||
* being locked in the same thread as the parent channel.
|
||||
*/
|
||||
atomic_set(&chan->nesting, L2CAP_NESTING_PARENT);
|
||||
|
||||
chan->state = BT_LISTEN;
|
||||
sk->sk_state = BT_LISTEN;
|
||||
|
||||
|
@ -1497,6 +1503,9 @@ static void l2cap_sock_init(struct sock *sk, struct sock *parent)
|
|||
l2cap_chan_set_defaults(chan);
|
||||
}
|
||||
|
||||
/* Set default lock nesting level */
|
||||
atomic_set(&chan->nesting, L2CAP_NESTING_NORMAL);
|
||||
|
||||
/* Default config options */
|
||||
chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue