Skip to content

Commit

Permalink
Bluetooth: Fix bug with ERTM minimum packet length
Browse files Browse the repository at this point in the history
ERTM and streaming mode L2CAP sockets have no minimum packet length. Only
basic mode connections have minimum length.

Instead, validate the packet containing all necessary control, FCS,
and SAR fields.

The patch fixes the drop of valid packets with length lower than 4.

Signed-off-by: Nathan Holstein <ngh@isomerica.net>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
  • Loading branch information
Nathan Holstein authored and Marcel Holtmann committed Jul 21, 2010
1 parent bfbacc1 commit 51893f8
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions net/bluetooth/l2cap.c
Original file line number Diff line number Diff line change
Expand Up @@ -4092,9 +4092,9 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
{
struct sock *sk;
struct l2cap_pinfo *pi;
u16 control, len;
u16 control;
u8 tx_seq, req_seq;
int next_tx_seq_offset, req_seq_offset;
int len, next_tx_seq_offset, req_seq_offset;

sk = l2cap_get_chan_by_scid(&conn->chan_list, cid);
if (!sk) {
Expand Down Expand Up @@ -4164,7 +4164,7 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
}

if (__is_iframe(control)) {
if (len < 4) {
if (len < 0) {
l2cap_send_disconn_req(pi->conn, sk);
goto drop;
}
Expand Down Expand Up @@ -4192,7 +4192,7 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
if (pi->fcs == L2CAP_FCS_CRC16)
len -= 2;

if (len > pi->mps || len < 4 || __is_sframe(control))
if (len > pi->mps || len < 0 || __is_sframe(control))
goto drop;

if (l2cap_check_fcs(pi, skb))
Expand Down

0 comments on commit 51893f8

Please sign in to comment.