• Marcel Holtmann's avatar
    Bluetooth: Fix BR/EDR out-of-band pairing with only initiator data · 455c2ff0
    Marcel Holtmann authored
    When only the pairing initiator is providing out-of-band data, then
    the receiver side was ignoring the data. For some reason the code was
    checking if the initiator has received out-of-band data and only then
    also provide the required inidication that the acceptor actually has
    the needed data available.
    
    For BR/EDR out-of-band pairing it is enough if one side has received
    out-of-band data. There are no extra checks needed here to make this
    work smoothly. The only thing that is needed is to tell the controller
    if data is present (and if it is P-192 or P-256 or both) and then let
    the controller actually figure out the rest.
    
    This means the check for outgoing connection or if the initiator has
    indicated data are completely pointless and are in fact actually
    causing harm. The check in question is this one:
    
       if (conn->out || test_bit(HCI_CONN_REMOTE_OOB, &conn->flags)) {
    
    After just taking the conditional check out and always executing the
    code for determining the type of out-of-band data, the pairing works
    flawlessly and prodcudes authenticated link keys.
    
    The patch itself looks more complicated due to the reformatting of the
    indentation, but it essentially just a two-line change.
    Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
    Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
    455c2ff0
hci_event.c 123 KB