Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp3053413pxb; Sun, 26 Sep 2021 04:05:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzaxNT6faLqKnnjveklvpKM++2cfMl9kbAvf2h3gV1aS7h89fK7PrB1cLHfoS3N4SHxYTwr X-Received: by 2002:a92:4a10:: with SMTP id m16mr15673246ilf.91.1632654304807; Sun, 26 Sep 2021 04:05:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632654304; cv=none; d=google.com; s=arc-20160816; b=QaR01X360v6O7AaeThUJaQszL0jGr7kbJG7J5rjDbnVPSTNpd4mA0Mlbmcf8JgiqXn BHUedzRFzDARN343h3PbPIGZtBoatERBPAZ8RB7XFXDnUDZZ0i3vxX6mwHD2Q9kYjKdp JOlqTzCnE0IbSQioippTp08YbIsgvHq8LFkPkFsH1UKHSUS9GnkX4q+TOuI7M9/iaTUc 1QALj6Zh1+wAgdUCN36wV1lDmMD3bf8TNw9C10xvoPwGOdp3ofbKuFC6KqeCpT50POX2 TgDrM455swJ99bSDtSZP4gpz1TdWZnpqXVOt8aL4OQVLgQ4hsnI7wUObPJXgbDWx3C+g g5Rg== 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=lRF7yOKXGzNhLwVPcOxOsZ14uuT6oXFxeAnadRHN/0CV9uFCpyD8lYKP3FcBI/o3cF 0daqwvdbTvcOJda1jNQDqxS18FVKx7buFY7jCPjKluNd/DM69mI3l3QXUc7lJyunYg6s tWc9gYjRi4AP1PRlE8ru6uQXmlziTz44uWtsxtGNdbRXRoqhQ407x0uUXB8WRP2Bn8eh H5xdJmX0yfiyXskuswDc8QX0CXZzvRs2w4/CCt4UXbTgfIc4EQx2SfYQCoTMGlnPFeH8 5/18HiYpBBDic/mAu+b24ga3/2VdDLAkM5mdlsCNJXYoR5jAE5fQu7kX9NahzGtvW7gk EV+g== 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 m10si16929998ioh.48.2021.09.26.04.04.52; Sun, 26 Sep 2021 04:05:04 -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 S230441AbhIZLEF (ORCPT + 99 others); Sun, 26 Sep 2021 07:04:05 -0400 Received: from szxga01-in.huawei.com ([45.249.212.187]:11028 "EHLO szxga01-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230415AbhIZLD7 (ORCPT ); Sun, 26 Sep 2021 07:03:59 -0400 Received: from dggeml757-chm.china.huawei.com (unknown [172.30.72.57]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4HHN9b0SFvzVsbM; Sun, 26 Sep 2021 19:01:07 +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; Sun, 26 Sep 2021 19:02:21 +0800 From: Ziyang Xuan To: CC: , , , , , Subject: [PATCH net 1/2] can: isotp: add result check for wait_event_interruptible() Date: Sun, 26 Sep 2021 19:01:23 +0800 Message-ID: <10ca695732c9dd267c76a3c30f37aefe1ff7e32f.1632653477.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: dggems702-chm.china.huawei.com (10.3.19.179) 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