Re: [PATCH net v2] can: can327: Fix out-of-bounds write in can327_parse_frame()
Marc Kleine-Budde <[email protected]>
| Newsgroups | org.kernel.vger.linux-can,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On 19.08.2026 07:18:18, Baul Lee wrote: > can327_parse_frame() assigns the CAN payload length from the DLC nibble > of the adapter's ASCII frame line, hex_to_bin(elm->rxbuf[datastart - 2]), > without validating it. A standard-format line only has to satisfy > rxbuf[3] == ' ' and rxbuf[5] == ' ', so the DLC nibble rxbuf[4] can be a > space, for which hex_to_bin() returns -1, and that becomes 255 in the u8 > frame->len. A hex nibble of 9 to f is not rejected either, while > CAN_MAX_DLEN is 8. > > frame->data[] is the 8-byte payload of the 16-byte struct can_frame > returned by alloc_can_skb(), so the data-nibble loop writes up to 255 > device-controlled bytes, 247 of them past the frame and over the > trailing skb_shared_info. The length check before the loop only requires > the line to be frame->len * 3 + datastart bytes, which a long enough > line of hex and spaces satisfies. Freeing the corrupted skb then faults: > > pc : skb_release_data+0xf4/0x200 > Call trace: > skb_release_data+0xf4/0x200 (P) > sk_skb_reason_drop+0x40/0xa4 > can_rcv+0x6c/0xbc > __netif_receive_skb_one_core+0x40/0x4c > can327_ldisc_rx+0xc8/0x140 > tty_ldisc_receive_buf+0x48/0x60 > flush_to_ldisc+0xdc/0x1b0 > Kernel panic - not syncing: Oops: Fatal exception in interrupt > > Reject the line when the nibble is not a hex digit or exceeds > CAN_MAX_DLEN, as the parser already does for other malformed lines. > > Attaching the N_CAN327 line discipline requires CAP_NET_ADMIN, but the > frame lines then come from the ELM327 device, so a malicious adapter > reaches this path with device-controlled data. > > Discovered by XBOW, triaged by Baul Lee <[email protected]> > > Fixes: 43da2f07622f ("can: can327: CAN/ldisc driver for ELM327 based OBD-II adapters") > Cc: [email protected] > Signed-off-by: Baul Lee <[email protected]> > Reviewed-by: Max Staudt <[email protected]> Nitpick, your S-o-b must come last. regards, Marc -- Pengutronix e.K. | Marc Kleine-Budde | Embedded Linux | https://www.pengutronix.de | Vertretung Nürnberg | Phone: +49-5121-206917-129 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
signature.asc
(application/pgp-signature, 228 B)
-----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQSl+MghEFFAdY3pYJLMOmT6rpmt0gUCaoVFHwAKCRDMOmT6rpmt 0p69AQDHpmwieeeBXrYyatZzdoGli5Lp5B4Q3SgBSuf1QObsfwD/ZUuTmTfom+Kf xS3ovQE1p/8d/QUi1+DFPX3iHzVpIgQ= =ixIo -----END PGP SIGNATURE-----