linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>,
	Sasha Levin <sashal@kernel.org>,
	ntfs3@lists.linux.dev
Subject: [PATCH AUTOSEL 6.1 01/28] fs/ntfs3: Modified fix directory element type detection
Date: Mon, 12 Feb 2024 19:21:59 -0500	[thread overview]
Message-ID: <20240213002235.671934-1-sashal@kernel.org> (raw)

From: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>

[ Upstream commit 22457c047ed971f2f2e33be593ddfabd9639a409 ]

Unfortunately reparse attribute is used for many purposes (several dozens).
It is not possible here to know is this name symlink or not.
To get exactly the type of name we should to open inode (read mft).
getattr for opened file (fstat) correctly returns symlink.

Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 fs/ntfs3/dir.c | 30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/fs/ntfs3/dir.c b/fs/ntfs3/dir.c
index d4d9f4ffb6d9..c2fb76bb28f4 100644
--- a/fs/ntfs3/dir.c
+++ b/fs/ntfs3/dir.c
@@ -309,11 +309,31 @@ static inline int ntfs_filldir(struct ntfs_sb_info *sbi, struct ntfs_inode *ni,
 		return 0;
 	}
 
-	/* NTFS: symlinks are "dir + reparse" or "file + reparse" */
-	if (fname->dup.fa & FILE_ATTRIBUTE_REPARSE_POINT)
-		dt_type = DT_LNK;
-	else
-		dt_type = (fname->dup.fa & FILE_ATTRIBUTE_DIRECTORY) ? DT_DIR : DT_REG;
+	/*
+	 * NTFS: symlinks are "dir + reparse" or "file + reparse"
+	 * Unfortunately reparse attribute is used for many purposes (several dozens).
+	 * It is not possible here to know is this name symlink or not.
+	 * To get exactly the type of name we should to open inode (read mft).
+	 * getattr for opened file (fstat) correctly returns symlink.
+	 */
+	dt_type = (fname->dup.fa & FILE_ATTRIBUTE_DIRECTORY) ? DT_DIR : DT_REG;
+
+	/*
+	 * It is not reliable to detect the type of name using duplicated information
+	 * stored in parent directory.
+	 * The only correct way to get the type of name - read MFT record and find ATTR_STD.
+	 * The code below is not good idea.
+	 * It does additional locks/reads just to get the type of name.
+	 * Should we use additional mount option to enable branch below?
+	 */
+	if ((fname->dup.fa & FILE_ATTRIBUTE_REPARSE_POINT) &&
+	    ino != ni->mi.rno) {
+		struct inode *inode = ntfs_iget5(sbi->sb, &e->ref, NULL);
+		if (!IS_ERR_OR_NULL(inode)) {
+			dt_type = fs_umode_to_dtype(inode->i_mode);
+			iput(inode);
+		}
+	}
 
 	return !dir_emit(ctx, (s8 *)name, name_len, ino, dt_type);
 }
-- 
2.43.0


             reply	other threads:[~2024-02-13  0:22 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-13  0:21 Sasha Levin [this message]
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 02/28] fs/ntfs3: Improve ntfs_dir_count Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 03/28] fs/ntfs3: Correct hard links updating when dealing with DOS names Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 04/28] fs/ntfs3: Print warning while fixing hard links count Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 05/28] fs/ntfs3: Fix detected field-spanning write (size 8) of single field "le->name" Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 06/28] fs/ntfs3: Add NULL ptr dereference checking at the end of attr_allocate_frame() Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 07/28] fs/ntfs3: Disable ATTR_LIST_ENTRY size check Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 08/28] fs/ntfs3: use non-movable memory for ntfs3 MFT buffer cache Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 09/28] fs/ntfs3: Prevent generic message "attempt to access beyond end of device" Sasha Levin
2024-02-18 18:00   ` Pavel Machek
2024-02-18 18:06     ` Greg KH
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 10/28] fs/ntfs3: Correct function is_rst_area_valid Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 11/28] fs/ntfs3: Update inode->i_size after success write into compressed file Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 12/28] fs/ntfs3: Fix oob in ntfs_listxattr Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 13/28] wifi: mac80211: set station RX-NSS on reconfig Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 14/28] wifi: mac80211: adding missing drv_mgd_complete_tx() call Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 15/28] efi: runtime: Fix potential overflow of soft-reserved region size Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 16/28] efi: Don't add memblocks for soft-reserved memory Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 17/28] hwmon: (coretemp) Enlarge per package core count limit Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 18/28] scsi: lpfc: Use unsigned type for num_sge Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 19/28] scsi: ufs: core: Remove the ufshcd_release() in ufshcd_err_handling_prepare() Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 20/28] LoongArch: Select ARCH_ENABLE_THP_MIGRATION instead of redefining it Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 21/28] LoongArch: Select HAVE_ARCH_SECCOMP to use the common SECCOMP menu Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 22/28] firewire: core: send bus reset promptly on gap count error Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 23/28] PCI: dwc: Clean up dw_pcie_ep_raise_msi_irq() alignment Sasha Levin
2024-02-18 18:01   ` Pavel Machek
2024-02-21 18:53     ` Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 24/28] drm/amdgpu: skip to program GFXDEC registers for suspend abort Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 25/28] drm/amdgpu: reset gpu for s3 suspend abort case Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 26/28] smb: client: set correct d_type for reparse points under DFS mounts Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 27/28] virtio-blk: Ensure no requests in virtqueues before deleting vqs Sasha Levin
2024-02-13  0:22 ` [PATCH AUTOSEL 6.1 28/28] smb3: clarify mount warning Sasha Levin

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=20240213002235.671934-1-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=almaz.alexandrovich@paragon-software.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ntfs3@lists.linux.dev \
    --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;
as well as URLs for NNTP newsgroup(s).