All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
To: <ntfs3@lists.linux.dev>
Cc: <linux-kernel@vger.kernel.org>, <linux-fsdevel@vger.kernel.org>
Subject: [PATCH 2/3] fs/ntfs3: Check reserved size for maximum allowed
Date: Fri, 24 Jun 2022 14:41:23 +0300	[thread overview]
Message-ID: <8cb6d3fe-22ed-4166-c047-de0da97c4a11@paragon-software.com> (raw)
In-Reply-To: <f76c96bb-fdea-e1e5-5f47-c092af5fe556@paragon-software.com>

Also don't mask EFBIG
Fixes xfstest generic/485
Fixes: 4342306f0f0d ("fs/ntfs3: Add file operations and implementation")

Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
---
  fs/ntfs3/attrib.c | 11 ++++++++++-
  fs/ntfs3/file.c   |  3 ---
  2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/fs/ntfs3/attrib.c b/fs/ntfs3/attrib.c
index bea0e70e974a..3bd51cf4d8bd 100644
--- a/fs/ntfs3/attrib.c
+++ b/fs/ntfs3/attrib.c
@@ -2114,9 +2114,11 @@ int attr_insert_range(struct ntfs_inode *ni, u64 vbo, u64 bytes)
  
  	if (!attr_b->non_res) {
  		data_size = le32_to_cpu(attr_b->res.data_size);
+		alloc_size = data_size;
  		mask = sbi->cluster_mask; /* cluster_size - 1 */
  	} else {
  		data_size = le64_to_cpu(attr_b->nres.data_size);
+		alloc_size = le64_to_cpu(attr_b->nres.alloc_size);
  		mask = (sbi->cluster_size << attr_b->nres.c_unit) - 1;
  	}
  
@@ -2130,6 +2132,13 @@ int attr_insert_range(struct ntfs_inode *ni, u64 vbo, u64 bytes)
  		return -EINVAL;
  	}
  
+	/*
+	 * valid_size <= data_size <= alloc_size
+	 * Check alloc_size for maximum possible.
+	 */
+	if (bytes > sbi->maxbytes_sparse - alloc_size)
+		return -EFBIG;
+
  	vcn = vbo >> sbi->cluster_bits;
  	len = bytes >> sbi->cluster_bits;
  
diff --git a/fs/ntfs3/file.c b/fs/ntfs3/file.c
index 5ee035e42c21..de37d5c1d60b 100644
--- a/fs/ntfs3/file.c
+++ b/fs/ntfs3/file.c
@@ -732,9 +732,6 @@ static long ntfs_fallocate(struct file *file, int mode, loff_t vbo, loff_t len)
  	if (map_locked)
  		filemap_invalidate_unlock(mapping);
  
-	if (err == -EFBIG)
-		err = -ENOSPC;
-
  	if (!err) {
  		inode->i_ctime = inode->i_mtime = current_time(inode);
  		mark_inode_dirty(inode);
-- 
2.36.1



  parent reply	other threads:[~2022-06-24 11:41 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-24 11:39 [PATCH 0/3] fs/ntfs3: Various bug fixes Konstantin Komarov
2022-06-24 11:40 ` [PATCH 1/3] fs/ntfs3: Do not change mode if ntfs_set_ea failed Konstantin Komarov
2022-06-24 11:41 ` Konstantin Komarov [this message]
2022-06-24 11:43 ` [PATCH 3/3] fs/ntfs3: extend ni_insert_nonresident to return inserted ATTR_LIST_ENTRY Konstantin Komarov

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=8cb6d3fe-22ed-4166-c047-de0da97c4a11@paragon-software.com \
    --to=almaz.alexandrovich@paragon-software.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ntfs3@lists.linux.dev \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.