linux/net/bluetooth/rfcomm
Hui Peng 6d91041bb3 Bluetooth: RFCOMM: Reject short EA=0 frames in rfcomm_recv_frame()
While rfcomm_recv_frame() verifies that skb->len is at least
sizeof(*hdr) + 1 (4 bytes: 3-byte header + 1-byte FCS), an RFCOMM frame
with an extended 2-byte length field (!__test_ea(hdr->len)) has a 4-byte
header plus a 1-byte FCS (5 bytes minimum, sizeof(*hdr) + 2).

When a 4-byte RFCOMM frame with EA == 0 arrives:
1. The initial skb->len < sizeof(*hdr) + 1 check passes (4 < 4 is false).
2. Trimming the FCS byte decrements skb->len to 3.
3. If __check_fcs() succeeds, skb_pull(skb, 4) fails (4 > 3) and returns
   NULL without advancing skb->data.
4. Because the return value of skb_pull() is ignored, the un-pulled
   3-byte struct rfcomm_hdr remains at skb->data and is either queued as
   application payload via rfcomm_recv_data() or parsed as a multiplexer
   control command via rfcomm_recv_mcc() on DLCI 0.

Fix this by extending the length check in rfcomm_recv_frame() to also
require skb->len >= sizeof(*hdr) + 2 when !__test_ea(hdr->len).

Fixes: b230e5bf50 ("Bluetooth: RFCOMM: validate skb length in rfcomm_recv_frame")
Assisted-by: LLM
Signed-off-by: Hui Peng <benquike@gmail.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2026-09-21 09:37:20 -04:00
..
core.c Bluetooth: RFCOMM: Reject short EA=0 frames in rfcomm_recv_frame() 2026-09-21 09:37:20 -04:00
Kconfig Bluetooth: fix BT dependency for submodules 2026-08-07 15:38:30 -04:00
Makefile Bluetooth: enable context analysis 2026-08-07 12:27:20 -04:00
sock.c Bluetooth: RFCOMM: fix NULL dereference of dlc->session in RFCOMM_CONNINFO 2026-09-21 09:37:20 -04:00
tty.c Bluetooth: RFCOMM: Fix session UAF in set_termios 2026-07-20 17:41:07 -04:00