• Ziyang Xuan's avatar
    can: isotp: isotp_sendmsg(): add result check for wait_event_interruptible() · 9acf6362
    Ziyang Xuan authored
    Using wait_event_interruptible() to wait for complete transmission,
    but do not check the result of wait_event_interruptible() which can be
    interrupted. It will result in TX buffer has multiple accessors and
    the later process interferes with the previous process.
    
    Following is one of the problems reported by syzbot.
    
    =============================================================
    WARNING: CPU: 0 PID: 0 at net/can/isotp.c:840 isotp_tx_timer_handler+0x2e0/0x4c0
    CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.13.0-rc7+ #68
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1 04/01/2014
    RIP: 0010:isotp_tx_timer_handler+0x2e0/0x4c0
    Call Trace:
     <IRQ>
     ? isotp_setsockopt+0x390/0x390
     __hrtimer_run_queues+0xb8/0x610
     hrtimer_run_softirq+0x91/0xd0
     ? rcu_read_lock_sched_held+0x4d/0x80
     __do_softirq+0xe8/0x553
     irq_exit_rcu+0xf8/0x100
     sysvec_apic_timer_interrupt+0x9e/0xc0
     </IRQ>
     asm_sysvec_apic_timer_interrupt+0x12/0x20
    
    Add result check for wait_event_interruptible() in isotp_sendmsg()
    to avoid multiple accessers for tx buffer.
    
    Fixes: e057dd3f ("can: add ISO 15765-2:2016 transport protocol")
    Link: https://lore.kernel.org/all/10ca695732c9dd267c76a3c30f37aefe1ff7e32f.1633764159.git.william.xuanziyang@huawei.com
    Cc: stable@vger.kernel.org
    Reported-by: syzbot+78bab6958a614b0c80b9@syzkaller.appspotmail.com
    Signed-off-by: default avatarZiyang Xuan <william.xuanziyang@huawei.com>
    Acked-by: default avatarOliver Hartkopp <socketcan@hartkopp.net>
    Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
    9acf6362
isotp.c 37.9 KB