summaryrefslogtreecommitdiffstats
path: root/net/bluetooth/smp.c
diff options
context:
space:
mode:
authorBrian Gix <bgix@codeaurora.org>2011-11-23 08:28:35 -0800
committerGustavo F. Padovan <padovan@profusion.mobi>2011-12-01 22:53:46 +0900
commitc8eb969071032defb1dc493ae28cf2e2a31193a5 (patch)
tree50d44422500b5df6cb51b591552e90cc9697ee4e /net/bluetooth/smp.c
parent1143d45846f190465382dd667c7f893b9d1fd131 (diff)
downloadlinux-c8eb969071032defb1dc493ae28cf2e2a31193a5.tar.gz
linux-c8eb969071032defb1dc493ae28cf2e2a31193a5.tar.xz
Bluetooth: Cleanup blkcipher on SMP termination
The blkcipher must be freed to avoid memory leak. Signed-off-by: Brian Gix <bgix@codeaurora.org> Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Diffstat (limited to 'net/bluetooth/smp.c')
-rw-r--r--net/bluetooth/smp.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
index 94e94ca35384..b9af4885ae53 100644
--- a/net/bluetooth/smp.c
+++ b/net/bluetooth/smp.c
@@ -379,7 +379,15 @@ static struct smp_chan *smp_chan_create(struct l2cap_conn *conn)
void smp_chan_destroy(struct l2cap_conn *conn)
{
- kfree(conn->smp_chan);
+ struct smp_chan *smp = conn->smp_chan;
+
+ clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->pend);
+
+ if (smp->tfm)
+ crypto_free_blkcipher(smp->tfm);
+
+ kfree(smp);
+ conn->smp_chan = NULL;
hci_conn_put(conn->hcon);
}