]> git.baikalelectronics.ru Git - kernel.git/commit
can: isotp: stop timeout monitoring when no first frame was sent
authorOliver Hartkopp <socketcan@hartkopp.net>
Tue, 5 Apr 2022 17:51:12 +0000 (19:51 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Sun, 17 Apr 2022 15:21:22 +0000 (17:21 +0200)
commit41643efe4abe59794171f14df1e5de0448829786
tree2a2c9c2f7fdb78e3c4b804c51dd2688a28d72605
parent71f57bbdcb8b3e4904ff14aa2b0bbf71858bbf77
can: isotp: stop timeout monitoring when no first frame was sent

The first attempt to fix a the 'impossible' WARN_ON_ONCE(1) in
isotp_tx_timer_handler() focussed on the identical CAN IDs created by
the syzbot reproducer and lead to upstream fix/commit 0d7a4a9ad3db
("can: isotp: sanitize CAN ID checks in isotp_bind()"). But this did
not catch the root cause of the wrong tx.state in the tx_timer handler.

In the isotp 'first frame' case a timeout monitoring needs to be started
before the 'first frame' is send. But when this sending failed the timeout
monitoring for this specific frame has to be disabled too.

Otherwise the tx_timer is fired with the 'warn me' tx.state of ISOTP_IDLE.

Fixes: 3f9425168a78 ("can: add ISO 15765-2:2016 transport protocol")
Link: https://lore.kernel.org/all/20220405175112.2682-1-socketcan@hartkopp.net
Reported-by: syzbot+2339c27f5c66c652843e@syzkaller.appspotmail.com
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
net/can/isotp.c