Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp16904rdb; Mon, 4 Dec 2023 18:26:13 -0800 (PST) X-Google-Smtp-Source: AGHT+IHpU6zepVWAu5CYe0xvhp+cgAegUGI4YimtzfwEHRdvTD8omIbJRwCwikD/N5k9ByTcPpHb X-Received: by 2002:a05:6a20:8407:b0:18f:97c:9767 with SMTP id c7-20020a056a20840700b0018f097c9767mr7083924pzd.79.1701743173531; Mon, 04 Dec 2023 18:26:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701743173; cv=none; d=google.com; s=arc-20160816; b=l4LaaC9OCbthFjlADPKU5YgyYbo+f56eVfhcldEu0FgSbEJZTS+fSFxpdmy/WEvsku q7OxCAyTsLqgdytdtdwPoHqK6Ga50virjRWsLnglXei9jtNQiqhNNoAypkmiyDwJcFUO JFpSP3Q9shLaCiPU/7zrWsA8DqkSbMRRaQgFZEeiXpO6CdHTtBdTqk//NOk8OksYv7Hp qWjjiKLN1zUEaYX2LYwoHvDYmhAatvri4fcU+qz0KN6qf0n4b86n8wXkYXWPnLoi4D5X oE1690t4ibBM/lh5yUIsK2DApTMyGQiQOZ2K8kx2bgvjj4TzBEwtftVjgwY7k3QAgVtg Ld/Q== 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:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=T08sUyzdKaybfEkZCNae4ocOGsjYgJj1qnspFJtuRWw=; fh=DgGXwGbnyiv1Rvt/NkXbEKOXDvWVLBCb4IpCdacEJoI=; b=acR730KcUBUZvySgGOt+cY48VkpnyCv+r977RN62LkjtnXPbqbxCl2z7G7bxNvg/ry l9pqX2jR02kMEdjvyD6xdqnDbKkDt+IoKjF7HU6zorqCCKsNLW/qpox2FZZpzTksw3qk LZCJnyDiV6wnrRuwzC3PxkzehPDvu3nGV0g19G9ZRRRWqX1JfjdNaygROHsQ04fPGLnF 5S5YKAMWq5mThWoNSgKYj111ewzPsAeOpDuejaWsrXO08kkjLC5gQJjJGGBomVM100Su z0zw5sr+i65tb1zdm3nS/RinFs7Uqec4HHzf9bCMNqlxa3ByutZ3lSrkfF1gAy+7Vj8A 9lkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.org.uk header.s=zeniv-20220401 header.b=sG2R03ek; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zeniv.linux.org.uk Return-Path: Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id a13-20020a65604d000000b005bdc49d22a4si9096038pgp.103.2023.12.04.18.26.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Dec 2023 18:26:13 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.org.uk header.s=zeniv-20220401 header.b=sG2R03ek; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zeniv.linux.org.uk Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 13A28804705C; Mon, 4 Dec 2023 18:26:12 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1376526AbjLECZb (ORCPT + 99 others); Mon, 4 Dec 2023 21:25:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35036 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1376315AbjLECYf (ORCPT ); Mon, 4 Dec 2023 21:24:35 -0500 Received: from zeniv.linux.org.uk (zeniv.linux.org.uk [IPv6:2a03:a000:7:0:5054:ff:fe1c:15ff]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 945B319B; Mon, 4 Dec 2023 18:24:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=linux.org.uk; s=zeniv-20220401; h=Sender:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description; bh=T08sUyzdKaybfEkZCNae4ocOGsjYgJj1qnspFJtuRWw=; b=sG2R03ekVwwAxoq11TFm7JYoNF LBzgdyhR0BPn4bSp+rm5Q/rwH6wBDh9Zb7Wp/GjnViZelURXwrV68kMLIGNyVSns+QMr5M4qRfqH+ cc/j/YX5S0Ps/6k/c7cUuaFYkv647kmCb3Al9Zn+2BcQzeSP0Vo9Q0VQ8q7UBdlMn5UdNVZudqKT5 JnTEmRlOVHn412hWtQWUkWCPPtTHUbDZHo31J8muxpz1ttkwaBZHvgUIx12SuvabvGWGyqocb1AvN skzKt4RgIbOTs6oKoMD2oAAYwFC98RfyhHXYvH6If2i3IKTXulQkYt+U682n5Y1tBFhb12eXQIKm2 RHf3LYMA==; Received: from viro by zeniv.linux.org.uk with local (Exim 4.96 #2 (Red Hat Linux)) id 1rAL6h-00792A-2A; Tue, 05 Dec 2023 02:24:19 +0000 From: Al Viro To: linux-arch@vger.kernel.org Cc: gus Gusenleitner Klaus , Al Viro , Thomas Gleixner , lkml , Ingo Molnar , "bp@alien8.de" , "dave.hansen@linux.intel.com" , "x86@kernel.org" , "David S. Miller" , "dsahern@kernel.org" , "kuba@kernel.org" , Paolo Abeni , Eric Dumazet Subject: [PATCH v2 4/9] ext2: Avoid reading renamed directory if parent does not change Date: Tue, 5 Dec 2023 02:23:58 +0000 Message-Id: <20231205022418.1703007-7-viro@zeniv.linux.org.uk> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20231205022418.1703007-1-viro@zeniv.linux.org.uk> References: <20231205022100.GB1674809@ZenIV> <20231205022418.1703007-1-viro@zeniv.linux.org.uk> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: Al Viro X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 04 Dec 2023 18:26:12 -0800 (PST) From: Jan Kara The VFS will not be locking moved directory if its parent does not change. Change ext2 rename code to avoid reading renamed directory if its parent does not change. Although it is currently harmless it is a bad practice to read directory contents without inode->i_rwsem. Signed-off-by: Jan Kara Signed-off-by: Al Viro --- fs/ext2/namei.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/fs/ext2/namei.c b/fs/ext2/namei.c index 65f702b1da5b..8346ab9534c1 100644 --- a/fs/ext2/namei.c +++ b/fs/ext2/namei.c @@ -325,6 +325,7 @@ static int ext2_rename (struct mnt_idmap * idmap, struct ext2_dir_entry_2 * dir_de = NULL; struct folio * old_folio; struct ext2_dir_entry_2 * old_de; + bool old_is_dir = S_ISDIR(old_inode->i_mode); int err; if (flags & ~RENAME_NOREPLACE) @@ -342,7 +343,7 @@ static int ext2_rename (struct mnt_idmap * idmap, if (IS_ERR(old_de)) return PTR_ERR(old_de); - if (S_ISDIR(old_inode->i_mode)) { + if (old_is_dir && old_dir != new_dir) { err = -EIO; dir_de = ext2_dotdot(old_inode, &dir_folio); if (!dir_de) @@ -354,7 +355,7 @@ static int ext2_rename (struct mnt_idmap * idmap, struct ext2_dir_entry_2 *new_de; err = -ENOTEMPTY; - if (dir_de && !ext2_empty_dir (new_inode)) + if (old_is_dir && !ext2_empty_dir(new_inode)) goto out_dir; new_de = ext2_find_entry(new_dir, &new_dentry->d_name, @@ -368,14 +369,14 @@ static int ext2_rename (struct mnt_idmap * idmap, if (err) goto out_dir; inode_set_ctime_current(new_inode); - if (dir_de) + if (old_is_dir) drop_nlink(new_inode); inode_dec_link_count(new_inode); } else { err = ext2_add_link(new_dentry, old_inode); if (err) goto out_dir; - if (dir_de) + if (old_is_dir) inode_inc_link_count(new_dir); } @@ -387,7 +388,7 @@ static int ext2_rename (struct mnt_idmap * idmap, mark_inode_dirty(old_inode); err = ext2_delete_entry(old_de, old_folio); - if (!err && dir_de) { + if (!err && old_is_dir) { if (old_dir != new_dir) err = ext2_set_link(old_inode, dir_de, dir_folio, new_dir, false); -- 2.39.2