diff options
author | Johan Hedberg <johan.hedberg@intel.com> | 2014-01-30 19:40:00 -0800 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2014-02-13 09:51:41 +0200 |
commit | 98a0b845c63cb74e90a72d1e864ea4be968bdd83 (patch) | |
tree | 464a1121e17e527de1abcc17a425e4e74b366079 /net/bluetooth/smp.c | |
parent | a513e260ce25eaa5e8c6b834a70085be1d6f40c0 (diff) | |
download | op-kernel-dev-98a0b845c63cb74e90a72d1e864ea4be968bdd83.zip op-kernel-dev-98a0b845c63cb74e90a72d1e864ea4be968bdd83.tar.gz |
Bluetooth: Fix differentiating stored master vs slave LTK types
If LTK distribution happens in both directions we will have two LTKs for
the same remote device: one which is used when we're connecting as
master and another when we're connecting as slave. When looking up LTKs
from the locally stored list we shouldn't blindly return the first match
but also consider which type of key is in question. If we do not do this
we may end up selecting an incorrect encryption key for a connection.
This patch fixes the issue by always specifying to the LTK lookup
functions whether we're looking for a master or a slave key.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/bluetooth/smp.c')
-rw-r--r-- | net/bluetooth/smp.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c index 9b11670..efe51cc 100644 --- a/net/bluetooth/smp.c +++ b/net/bluetooth/smp.c @@ -699,7 +699,8 @@ static u8 smp_ltk_encrypt(struct l2cap_conn *conn, u8 sec_level) struct smp_ltk *key; struct hci_conn *hcon = conn->hcon; - key = hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type); + key = hci_find_ltk_by_addr(hcon->hdev, &hcon->dst, hcon->dst_type, + hcon->out); if (!key) return 0; |