Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp3846505ybz; Tue, 28 Apr 2020 01:14:22 -0700 (PDT) X-Google-Smtp-Source: APiQypJUmVhCjW6UGsr+pALHuqZxuARNhwKWuCLPi5QWB+ZU8qTH6xo6g1jy5C42PD8Z16q+T6ZT X-Received: by 2002:a17:906:4048:: with SMTP id y8mr23315404ejj.258.1588061662235; Tue, 28 Apr 2020 01:14:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588061662; cv=none; d=google.com; s=arc-20160816; b=bdRtONmvT6I/Y4zgY4JOhL2eCOuDdKZZLp/+1h8nGLR1BjLs642uzvEav9EjlYNXbu oxf058ONCSK6hAHYWFP5ZZmWQX+KtqMcUbQGXdr/CmQL+5WNZ6mAl7RWYIKAY4KeB8TH Fm3rBG4PxLRBeQd2cMZUz0+15IXxJ9equM35pY6qK6u+lcZphSqsXoXBd7PFWRAC+PkC mHmRNVqydhgqPxpywoN39yf9Fd0Iabfd38VtTte4GREbVn7QRilHTrqn/HWmAYzLs1EX Yh0iXz4G08e1vCg1hCrsPPl3clMBRI4IyM3vWfX8UJS+QG2AnDaJwm+lHFNcXHU3kJSE 9wAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=K7NNoF7oW+Xiqc+p6ZFmeBSxIl5zCgbt3ElcURjUFPc=; b=FD6mQT1bDwXMgBg30ropGJsp1c3hQTgGnQ2/Fx3UPQXLK8VPH/QAo2IqMxYaw0VPXo hDOwBJ2toQIFNJrkAHnBC6FSZOGXtEmeAr5LMGZ1T117Z3GHFkpzUNuI/3e7oYCqIXHx pUkvBbFZERxD20/M7E3Kg9ay70rgr2oY97EKyNLLUEOivI/IFwxjZbClUvwQAsqk9FgA /e89L3zf5R3qOVLFUY2duboQviO1oMN3Pj3gUlFN1pRis3mGE547A3+Ns23IxXJNZ3L3 puc5bjVUI8h3J6iBlQrclrlOUPo1cYzwgG/n9eFR4jV4g3lVa537mb4ndXPXS8nWOmIK hgUw== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q26si1380367ejx.520.2020.04.28.01.13.58; Tue, 28 Apr 2020 01:14:22 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726865AbgD1IMe (ORCPT + 99 others); Tue, 28 Apr 2020 04:12:34 -0400 Received: from szxga05-in.huawei.com ([45.249.212.191]:3322 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726377AbgD1IMe (ORCPT ); Tue, 28 Apr 2020 04:12:34 -0400 Received: from DGGEMS409-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id B73309E4F2E2C5FC861F; Tue, 28 Apr 2020 16:12:31 +0800 (CST) Received: from localhost (10.166.215.154) by DGGEMS409-HUB.china.huawei.com (10.3.19.209) with Microsoft SMTP Server id 14.3.487.0; Tue, 28 Apr 2020 16:12:24 +0800 From: YueHaibing To: , , , , , , , CC: , , , YueHaibing Subject: [PATCH] net/x25: Fix null-ptr-deref in x25_disconnect Date: Tue, 28 Apr 2020 16:12:08 +0800 Message-ID: <20200428081208.26308-1-yuehaibing@huawei.com> X-Mailer: git-send-email 2.10.2.windows.1 In-Reply-To: <000000000000cbf17205a452ad4f@google.com> References: <000000000000cbf17205a452ad4f@google.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.166.215.154] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We should check null before do x25_neigh_put in x25_disconnect, otherwise may cause null-ptr-deref like this: #include #include int main() { int sck_x25; sck_x25 = socket(AF_X25, SOCK_SEQPACKET, 0); close(sck_x25); return 0; } BUG: kernel NULL pointer dereference, address: 00000000000000d8 CPU: 0 PID: 4817 Comm: t2 Not tainted 5.7.0-rc3+ #159 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.3- RIP: 0010:x25_disconnect+0x91/0xe0 Call Trace: x25_release+0x18a/0x1b0 __sock_release+0x3d/0xc0 sock_close+0x13/0x20 __fput+0x107/0x270 ____fput+0x9/0x10 task_work_run+0x6d/0xb0 exit_to_usermode_loop+0x102/0x110 do_syscall_64+0x23c/0x260 entry_SYSCALL_64_after_hwframe+0x49/0xb3 Reported-by: syzbot+6db548b615e5aeefdce2@syzkaller.appspotmail.com Fixes: 4becb7ee5b3d ("net/x25: Fix x25_neigh refcnt leak when x25 disconnect") Signed-off-by: YueHaibing --- net/x25/x25_subr.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/net/x25/x25_subr.c b/net/x25/x25_subr.c index 8b1b06cabcbf..0285aaa1e93c 100644 --- a/net/x25/x25_subr.c +++ b/net/x25/x25_subr.c @@ -357,10 +357,12 @@ void x25_disconnect(struct sock *sk, int reason, unsigned char cause, sk->sk_state_change(sk); sock_set_flag(sk, SOCK_DEAD); } - read_lock_bh(&x25_list_lock); - x25_neigh_put(x25->neighbour); - x25->neighbour = NULL; - read_unlock_bh(&x25_list_lock); + if (x25->neighbour) { + read_lock_bh(&x25_list_lock); + x25_neigh_put(x25->neighbour); + x25->neighbour = NULL; + read_unlock_bh(&x25_list_lock); + } } /* -- 2.17.1