diff options
Diffstat (limited to 'net/bluetooth')
-rw-r--r-- | net/bluetooth/l2cap_core.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index d3b5d6489a80..7264119b64a6 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c | |||
@@ -236,6 +236,10 @@ void l2cap_chan_del(struct l2cap_chan *chan, int err) | |||
236 | } else | 236 | } else |
237 | sk->sk_state_change(sk); | 237 | sk->sk_state_change(sk); |
238 | 238 | ||
239 | if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE && | ||
240 | l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE)) | ||
241 | goto free; | ||
242 | |||
239 | skb_queue_purge(TX_QUEUE(sk)); | 243 | skb_queue_purge(TX_QUEUE(sk)); |
240 | 244 | ||
241 | if (l2cap_pi(sk)->mode == L2CAP_MODE_ERTM) { | 245 | if (l2cap_pi(sk)->mode == L2CAP_MODE_ERTM) { |
@@ -254,6 +258,7 @@ void l2cap_chan_del(struct l2cap_chan *chan, int err) | |||
254 | } | 258 | } |
255 | } | 259 | } |
256 | 260 | ||
261 | free: | ||
257 | kfree(chan); | 262 | kfree(chan); |
258 | } | 263 | } |
259 | 264 | ||