From: Catherine Hoang <catherine.hoang@oracle.com>
To: stable@vger.kernel.org
Cc: linux-xfs@vger.kernel.org
Subject: [PATCH 6.6 21/21] xfs: allow unlinked symlinks and dirs with zero size
Date: Tue, 15 Oct 2024 17:11:26 -0700 [thread overview]
Message-ID: <20241016001126.3256-22-catherine.hoang@oracle.com> (raw)
In-Reply-To: <20241016001126.3256-1-catherine.hoang@oracle.com>
From: "Darrick J. Wong" <djwong@kernel.org>
commit 1ec9307fc066dd8a140d5430f8a7576aa9d78cd3 upstream.
For a very very long time, inode inactivation has set the inode size to
zero before unmapping the extents associated with the data fork.
Unfortunately, commit 3c6f46eacd876 changed the inode verifier to
prohibit zero-length symlinks and directories. If an inode happens to
get logged in this state and the system crashes before freeing the
inode, log recovery will also fail on the broken inode.
Therefore, allow zero-size symlinks and directories as long as the link
count is zero; nobody will be able to open these files by handle so
there isn't any risk of data exposure.
Fixes: 3c6f46eacd876 ("xfs: sanity check directory inode di_size")
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
Signed-off-by: Catherine Hoang <catherine.hoang@oracle.com>
Acked-by: Darrick J. Wong <djwong@kernel.org>
---
fs/xfs/libxfs/xfs_inode_buf.c | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/fs/xfs/libxfs/xfs_inode_buf.c b/fs/xfs/libxfs/xfs_inode_buf.c
index 51fdd29c4ddc..423d39b6b917 100644
--- a/fs/xfs/libxfs/xfs_inode_buf.c
+++ b/fs/xfs/libxfs/xfs_inode_buf.c
@@ -371,10 +371,13 @@ xfs_dinode_verify_fork(
/*
* A directory small enough to fit in the inode must be stored
* in local format. The directory sf <-> extents conversion
- * code updates the directory size accordingly.
+ * code updates the directory size accordingly. Directories
+ * being truncated have zero size and are not subject to this
+ * check.
*/
if (S_ISDIR(mode)) {
- if (be64_to_cpu(dip->di_size) <= fork_size &&
+ if (dip->di_size &&
+ be64_to_cpu(dip->di_size) <= fork_size &&
fork_format != XFS_DINODE_FMT_LOCAL)
return __this_address;
}
@@ -512,9 +515,19 @@ xfs_dinode_verify(
if (mode && xfs_mode_to_ftype(mode) == XFS_DIR3_FT_UNKNOWN)
return __this_address;
- /* No zero-length symlinks/dirs. */
- if ((S_ISLNK(mode) || S_ISDIR(mode)) && di_size == 0)
- return __this_address;
+ /*
+ * No zero-length symlinks/dirs unless they're unlinked and hence being
+ * inactivated.
+ */
+ if ((S_ISLNK(mode) || S_ISDIR(mode)) && di_size == 0) {
+ if (dip->di_version > 1) {
+ if (dip->di_nlink)
+ return __this_address;
+ } else {
+ if (dip->di_onlink)
+ return __this_address;
+ }
+ }
fa = xfs_dinode_verify_nrext64(mp, dip);
if (fa)
--
2.39.3
next prev parent reply other threads:[~2024-10-16 0:12 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-16 0:11 [PATCH 6.6 00/21] xfs backports for 6.6.y (from 6.10) Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 01/21] xfs: fix error returns from xfs_bmapi_write Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 02/21] xfs: fix xfs_bmap_add_extent_delay_real for partial conversions Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 03/21] xfs: remove a racy if_bytes check in xfs_reflink_end_cow_extent Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 04/21] xfs: require XFS_SB_FEAT_INCOMPAT_LOG_XATTRS for attr log intent item recovery Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 05/21] xfs: check opcode and iovec count match in xlog_recover_attri_commit_pass2 Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 06/21] xfs: fix missing check for invalid attr flags Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 07/21] xfs: check shortform attr entry flags specifically Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 08/21] xfs: validate recovered name buffers when recovering xattr items Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 09/21] xfs: enforce one namespace per attribute Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 10/21] xfs: revert commit 44af6c7e59b12 Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 11/21] xfs: use dontcache for grabbing inodes during scrub Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 12/21] xfs: match lock mode in xfs_buffered_write_iomap_begin() Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 13/21] xfs: make the seq argument to xfs_bmapi_convert_delalloc() optional Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 14/21] xfs: make xfs_bmapi_convert_delalloc() to allocate the target offset Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 15/21] xfs: convert delayed extents to unwritten when zeroing post eof blocks Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 16/21] xfs: allow symlinks with short remote targets Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 17/21] xfs: make sure sb_fdblocks is non-negative Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 18/21] xfs: fix unlink vs cluster buffer instantiation race Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 19/21] xfs: fix freeing speculative preallocations for preallocated files Catherine Hoang
2024-10-16 0:11 ` [PATCH 6.6 20/21] xfs: restrict when we try to align cow fork delalloc to cowextsz hints Catherine Hoang
2024-10-16 0:11 ` Catherine Hoang [this message]
2024-10-18 8:44 ` [PATCH 6.6 00/21] xfs backports for 6.6.y (from 6.10) Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241016001126.3256-22-catherine.hoang@oracle.com \
--to=catherine.hoang@oracle.com \
--cc=linux-xfs@vger.kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox