Commit 6a7bd103 authored by Johan Hedberg's avatar Johan Hedberg Committed by Marcel Holtmann

Bluetooth: Add dedicated AES instance for each SMP context

Many places have to be extra careful to not hold the hdev lock when
calling into the SMP code. This is because the SMP crypto functions use
the crypto handle that's part of the hci_dev struct. Giving the SMP
context its own handle helps simplifying the locking logic and removes
the risk for deadlocks.
Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 31dd624e
...@@ -62,6 +62,8 @@ struct smp_chan { ...@@ -62,6 +62,8 @@ struct smp_chan {
struct smp_ltk *slave_ltk; struct smp_ltk *slave_ltk;
struct smp_irk *remote_irk; struct smp_irk *remote_irk;
unsigned long flags; unsigned long flags;
struct crypto_blkcipher *tfm_aes;
}; };
static inline void swap_buf(const u8 *src, u8 *dst, size_t len) static inline void swap_buf(const u8 *src, u8 *dst, size_t len)
...@@ -583,6 +585,13 @@ static struct smp_chan *smp_chan_create(struct l2cap_conn *conn) ...@@ -583,6 +585,13 @@ static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
if (!smp) if (!smp)
return NULL; return NULL;
smp->tfm_aes = crypto_alloc_blkcipher("ecb(aes)", 0, CRYPTO_ALG_ASYNC);
if (IS_ERR(smp->tfm_aes)) {
BT_ERR("Unable to create ECB crypto context");
kfree(smp);
return NULL;
}
smp->conn = conn; smp->conn = conn;
conn->smp_chan = smp; conn->smp_chan = smp;
conn->hcon->smp_conn = conn; conn->hcon->smp_conn = conn;
...@@ -605,6 +614,8 @@ void smp_chan_destroy(struct l2cap_conn *conn) ...@@ -605,6 +614,8 @@ void smp_chan_destroy(struct l2cap_conn *conn)
kfree(smp->csrk); kfree(smp->csrk);
kfree(smp->slave_csrk); kfree(smp->slave_csrk);
crypto_free_blkcipher(smp->tfm_aes);
/* If pairing failed clean up any keys we might have */ /* If pairing failed clean up any keys we might have */
if (!complete) { if (!complete) {
if (smp->ltk) { if (smp->ltk) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment