• Johan Hedberg's avatar
    Bluetooth: Fix locking of the SMP context · fc75cc86
    Johan Hedberg authored
    Before the move the l2cap_chan the SMP context (smp_chan) didn't have
    any kind of proper locking. The best there existed was the
    HCI_CONN_LE_SMP_PEND flag which was used to enable mutual exclusion for
    potential multiple creators of the SMP context.
    
    Now that SMP has been converted to use the l2cap_chan infrastructure and
    since the SMP context is directly mapped to a corresponding l2cap_chan
    we get the SMP context locking essentially for free through the
    l2cap_chan lock. For all callbacks that l2cap_core.c makes for each
    channel implementation (smp.c in the case of SMP) the l2cap_chan lock is
    held through l2cap_chan_lock(chan).
    
    Since the calls from l2cap_core.c to smp.c are covered the only missing
    piece to have the locking implemented properly is to ensure that the
    lock is held for any other call path that may access the SMP context.
    This means user responses through mgmt.c, requests to elevate the
    security of a connection through hci_conn.c, as well as any deferred
    work through workqueues.
    
    This patch adds the necessary locking to all these other code paths that
    try to access the SMP context. Since mutual exclusion for the l2cap_chan
    access is now covered from all directions the patch also removes
    unnecessary HCI_CONN_LE_SMP_PEND flag (once we've acquired the chan lock
    we can simply check whether chan->smp is set to know if there's an SMP
    context).
    Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
    Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
    fc75cc86
hci_core.h 37.9 KB