diff options
author | Mat Martineau <mathewm@codeaurora.org> | 2011-07-22 14:53:58 -0700 |
---|---|---|
committer | Gustavo F. Padovan <gustavo@padovan.org> | 2011-09-27 18:15:55 -0300 |
commit | 449357200c5d73d80a9c42dee5dafed684b3cd17 (patch) | |
tree | 333e387c99dc8cd03d334e61f1a5147b4e5bd8f9 /net/bluetooth/cmtp | |
parent | 9fd481e03c1e9c76c814b88b9ea1cbda9afb0812 (diff) | |
download | lwn-449357200c5d73d80a9c42dee5dafed684b3cd17.tar.gz lwn-449357200c5d73d80a9c42dee5dafed684b3cd17.zip |
Bluetooth: Linearize skbs for use in BNEP, CMTP, HIDP, and RFCOMM
Fragmented skbs are only encountered when receiving ERTM or streaming
mode L2CAP data. BNEP, CMTP, HIDP, and RFCOMM generally use basic
mode, but they need to handle fragments without crashing.
Signed-off-by: Mat Martineau <mathewm@codeaurora.org>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Diffstat (limited to 'net/bluetooth/cmtp')
-rw-r--r-- | net/bluetooth/cmtp/core.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/bluetooth/cmtp/core.c b/net/bluetooth/cmtp/core.c index 521baa4fe835..7d00ddf9e9dc 100644 --- a/net/bluetooth/cmtp/core.c +++ b/net/bluetooth/cmtp/core.c @@ -302,7 +302,10 @@ static int cmtp_session(void *arg) while ((skb = skb_dequeue(&sk->sk_receive_queue))) { skb_orphan(skb); - cmtp_recv_frame(session, skb); + if (!skb_linearize(skb)) + cmtp_recv_frame(session, skb); + else + kfree_skb(skb); } cmtp_process_transmit(session); |