summaryrefslogtreecommitdiffstats
path: root/net/bluetooth/l2cap.c
diff options
context:
space:
mode:
authorGustavo F. Padovan <padovan@profusion.mobi>2010-05-01 21:15:40 +0200
committerMarcel Holtmann <marcel@holtmann.org>2010-05-10 09:28:49 +0200
commit052897ca5019d9157ae09e5e84eee2a9ef5dccc6 (patch)
treee236a9c5b6559f31c69c9b5e6fa02dbd70294ad6 /net/bluetooth/l2cap.c
parentBluetooth: Add le16 macro to Retransmission and Monitor Timeouts values (diff)
downloadlinux-052897ca5019d9157ae09e5e84eee2a9ef5dccc6.tar.xz
linux-052897ca5019d9157ae09e5e84eee2a9ef5dccc6.zip
Bluetooth: Check the SDU size against the MTU value
If the SDU size is greater than the MTU something is wrong, so report an error. Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi> [jprvita@profusion.mobi: set err to appropriate errno value] Signed-off-by: João Paulo Rechi Vita <jprvita@profusion.mobi> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to '')
-rw-r--r--net/bluetooth/l2cap.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
index 0889949b6896..e936913c921e 100644
--- a/net/bluetooth/l2cap.c
+++ b/net/bluetooth/l2cap.c
@@ -3338,6 +3338,11 @@ static int l2cap_sar_reassembly_sdu(struct sock *sk, struct sk_buff *skb, u16 co
pi->sdu_len = get_unaligned_le16(skb->data);
skb_pull(skb, 2);
+ if (pi->sdu_len > pi->imtu) {
+ err = -EMSGSIZE;
+ break;
+ }
+
pi->sdu = bt_skb_alloc(pi->sdu_len, GFP_ATOMIC);
if (!pi->sdu) {
err = -ENOMEM;