]> 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)
commitb69742863cf58763a84150d84ad61362a33f459d
tree2a2c9c2f7fdb78e3c4b804c51dd2688a28d72605
parente217036158183638bc7ee7bc4f18b19d1df949d9
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 43d03bc09c48
("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: 28da5a05c8c3 ("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