Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp3074718pxb; Sat, 9 Oct 2021 00:42:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzT7SVd+sXdYni0du8kWetSE2bP5Ju0cYSM+hjDTZg5O26QeFQq/0mjPQcJHce5xNPOeAKz X-Received: by 2002:a17:902:d707:b0:13d:bbe8:bcff with SMTP id w7-20020a170902d70700b0013dbbe8bcffmr13265019ply.75.1633765354114; Sat, 09 Oct 2021 00:42:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633765354; cv=none; d=google.com; s=arc-20160816; b=KfCpZxxlQhE7jzZLNOthSq+FDhSp8+q9SPYjZiQ3b8J9Zq9g/OU64Geb07KIFE9dqv zJRwAWOyQPIXhpXR6z0AQevCU3l+YsGmnOYVLwDv3hBCRs/YAt/Qw/Ng5wUcth/q/HKa C2z7cDZA2h4IIHVFEeowMZ0IOy06TG0FGtzPnbl1WX6jGciLtcs7MFLdoMU9Tv0UdUUc Soy2kAgE+21wWevY0ntg3ufB0XMHMG1xRz1g8RQAKXnkX1nON7KIAtJbGEvwiaW8x9wr wzUdXGrhzThrR+hlAxFfi355xHH21I3j3Wp8NBTZyX+P6RNrqEv8KrhYAmPj/35YPMJ9 UOaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=t5I09bQfFUX+Tf2yFm7mJkDjAi/ieHDFTcFJGG1oouw=; b=qImqZIkcxQFCLvrfpgEFQIBtkOb8x34QbDaaHHwoeSXVmK5DlFUXz5/KK7mqqnZgHi D/kigoFTQNsDWj1nP3y4joHgCwngQbB6C6ltLVbuU52XYIO2/Ji/HhRPelwN0W7oiPn4 069ZRSabqEP4EcIcn8dAbSGWChNnjMWCDh5tXM2PKzIMIewVMj9zGjqwvTrFwBv6KCS+ TSr1D8dSg4kZxNGnR7lbDt4yw5mQiUT/PX1xFmi97Ff1CZdSIYwG8Eka3l/z123m9TkV 9fOhvod/y67IbsLstcYAKU1UFpGMBJT6simmmsZCrEzyeUDzkt+6mTznDh4eblz3vG+/ Qh2w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u2si2070296pgf.491.2021.10.09.00.42.21; Sat, 09 Oct 2021 00:42:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232898AbhJIHn1 (ORCPT + 99 others); Sat, 9 Oct 2021 03:43:27 -0400 Received: from szxga01-in.huawei.com ([45.249.212.187]:13712 "EHLO szxga01-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229804AbhJIHnZ (ORCPT ); Sat, 9 Oct 2021 03:43:25 -0400 Received: from dggeml757-chm.china.huawei.com (unknown [172.30.72.54]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4HRH5R2SybzW2Wm; Sat, 9 Oct 2021 15:39:55 +0800 (CST) Received: from localhost.localdomain (10.175.104.82) by dggeml757-chm.china.huawei.com (10.1.199.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2308.8; Sat, 9 Oct 2021 15:41:27 +0800 From: Ziyang Xuan To: , CC: , , , , Subject: [PATCH net v2 1/2] can: isotp: add result check for wait_event_interruptible() Date: Sat, 9 Oct 2021 15:40:18 +0800 Message-ID: <10ca695732c9dd267c76a3c30f37aefe1ff7e32f.1633764159.git.william.xuanziyang@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.175.104.82] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To dggeml757-chm.china.huawei.com (10.1.199.137) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 accessers 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: ? 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 asm_sysvec_apic_timer_interrupt+0x12/0x20 Add result check for wait_event_interruptible() in isotp_sendmsg() to avoid multiple accessers for tx buffer. Reported-by: syzbot+78bab6958a614b0c80b9@syzkaller.appspotmail.com Fixes: e057dd3fc20f ("can: add ISO 15765-2:2016 transport protocol") Signed-off-by: Ziyang Xuan --- net/can/isotp.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/net/can/isotp.c b/net/can/isotp.c index caaa532ece94..2ac29c2b2ca6 100644 --- a/net/can/isotp.c +++ b/net/can/isotp.c @@ -865,7 +865,9 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) return -EAGAIN; /* wait for complete transmission of current pdu */ - wait_event_interruptible(so->wait, so->tx.state == ISOTP_IDLE); + err = wait_event_interruptible(so->wait, so->tx.state == ISOTP_IDLE); + if (err) + return err; } if (!size || size > MAX_MSG_LENGTH) -- 2.25.1