Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp2538298ybt; Mon, 22 Jun 2020 00:27:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzTgk4D/WTOTuyo58Hb1tbz7A98ySw/6PfWDo0e66sCMmD6IPwCk1RsYHrH6Ot+RR9pPy68 X-Received: by 2002:a17:906:97cd:: with SMTP id ef13mr13741232ejb.165.1592810844123; Mon, 22 Jun 2020 00:27:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592810844; cv=none; d=google.com; s=arc-20160816; b=f7QfUK3zoI+rvisz2tLdBh95Cd7WAJXT/czjDa72/k2bz1/JDk72RGrWQORrQGZaPz ZZ97iNYmyC1T75aZn9uCvEyERRHcIZtOznJT3oyiWTIk+JlVSYMapvFk2x1iIRQo4pNT A//m2+PyOEMFtnGkcHWHt1tz4mqRZV4kUXWy2gqkT2QAZWcOetHfgfqiKjxSi4nj3RB6 nJBguKwe3SMfmXs9wsSAkgbmi5n6YvDrxy/xprwowRcuQxmm6w6cXEzsdDJJM4jklwc8 yvKYns56aHnwJ2akiVTDjBczCZlvfOIvwku58UPZqNPUGE11S5yjNyRZIg7qFXdTgjop 2OSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=eBzkh8Chx0N/GANds5AR70GxwMFyjcYrKnGNwtSkIf4=; b=xIVAsJyW5TqMpqyWbo6vsUQaVEofxg/2Ai4z7PlQMHmQPsfkTqJNFKwzwOVo+7UD7O hp2nFdS+Jn+I+nmDEBRXUyQ7Ti8OTRs0BGCpSq5SCJkQQdeLW/xJtESrrSdu9lLCiyx+ iRE7pe6w7Takf7oLSCpXkgHYQu+q0PgrGwCrVIoz+aD2QG/NX8mazI2GSot+jgPlO3KS 8zELx01WVbdbqL5T5qp9N++PEixQ+ibAlNwxugq7OEKIclpQ8P1WHJaCqSYPchb2mwy3 PFOnuJGd8joV9JT2dAx9YoJmRuDFXFoPOEhAz0LLOga7qnPwPA6+DV5KG/CAxVxNSGdP EqZw== 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 do5si11919942ejc.105.2020.06.22.00.27.01; Mon, 22 Jun 2020 00:27:24 -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 S1731353AbgFVHZP (ORCPT + 99 others); Mon, 22 Jun 2020 03:25:15 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]:43924 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731320AbgFVHZP (ORCPT ); Mon, 22 Jun 2020 03:25:15 -0400 Received: from DGGEMS412-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id B71C084EEA6DFF3F68BD; Mon, 22 Jun 2020 15:25:10 +0800 (CST) Received: from [10.133.219.224] (10.133.219.224) by DGGEMS412-HUB.china.huawei.com (10.3.19.212) with Microsoft SMTP Server id 14.3.487.0; Mon, 22 Jun 2020 15:25:04 +0800 Subject: Re: [PATCH] jffs2: fix UAF problem To: Zhe Li , , , , CC: , , , References: <20200619090635.58548-1-lizhe67@huawei.com> From: Hou Tao Message-ID: Date: Mon, 22 Jun 2020 15:25:03 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: <20200619090635.58548-1-lizhe67@huawei.com> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.133.219.224] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Reviewed-by: Hou Tao On 2020/6/19 17:06, Zhe Li wrote: > The log of UAF problem is listed below. > BUG: KASAN: use-after-free in jffs2_rmdir+0xa4/0x1cc [jffs2] at addr c1f165fc > Read of size 4 by task rm/8283 > ============================================================================= > BUG kmalloc-32 (Tainted: P B O ): kasan: bad access detected > ----------------------------------------------------------------------------- > > INFO: Allocated in 0xbbbbbbbb age=3054364 cpu=0 pid=0 > 0xb0bba6ef > jffs2_write_dirent+0x11c/0x9c8 [jffs2] > __slab_alloc.isra.21.constprop.25+0x2c/0x44 > __kmalloc+0x1dc/0x370 > jffs2_write_dirent+0x11c/0x9c8 [jffs2] > jffs2_do_unlink+0x328/0x5fc [jffs2] > jffs2_rmdir+0x110/0x1cc [jffs2] > vfs_rmdir+0x180/0x268 > do_rmdir+0x2cc/0x300 > ret_from_syscall+0x0/0x3c > INFO: Freed in 0x205b age=3054364 cpu=0 pid=0 > 0x2e9173 > jffs2_add_fd_to_list+0x138/0x1dc [jffs2] > jffs2_add_fd_to_list+0x138/0x1dc [jffs2] > jffs2_garbage_collect_dirent.isra.3+0x21c/0x288 [jffs2] > jffs2_garbage_collect_live+0x16bc/0x1800 [jffs2] > jffs2_garbage_collect_pass+0x678/0x11d4 [jffs2] > jffs2_garbage_collect_thread+0x1e8/0x3b0 [jffs2] > kthread+0x1a8/0x1b0 > ret_from_kernel_thread+0x5c/0x64 > Call Trace: > [c17ddd20] [c02452d4] kasan_report.part.0+0x298/0x72c (unreliable) > [c17ddda0] [d2509680] jffs2_rmdir+0xa4/0x1cc [jffs2] > [c17dddd0] [c026da04] vfs_rmdir+0x180/0x268 > [c17dde00] [c026f4e4] do_rmdir+0x2cc/0x300 > [c17ddf40] [c001a658] ret_from_syscall+0x0/0x3c > > The root cause is that we don't get "jffs2_inode_info.sem" before > we scan list "jffs2_inode_info.dents" in function jffs2_rmdir. > This patch add codes to get "jffs2_inode_info.sem" before we scan > "jffs2_inode_info.dents" to slove the UAF problem. > > Signed-off-by: Zhe Li > --- > fs/jffs2/dir.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/fs/jffs2/dir.c b/fs/jffs2/dir.c > index f20cff1..7764937 100644 > --- a/fs/jffs2/dir.c > +++ b/fs/jffs2/dir.c > @@ -590,10 +590,14 @@ static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry) > int ret; > uint32_t now = JFFS2_NOW(); > > + mutex_lock(&f->sem); > for (fd = f->dents ; fd; fd = fd->next) { > - if (fd->ino) > + if (fd->ino) { > + mutex_unlock(&f->sem); > return -ENOTEMPTY; > + } > } > + mutex_unlock(&f->sem); > > ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name, > dentry->d_name.len, f, now); >