Linux-ext4 Archive mirror
 help / color / mirror / Atom feed
From: Baokun Li <libaokun1@huawei.com>
To: <linux-ext4@vger.kernel.org>
Cc: <tytso@mit.edu>, <adilger.kernel@dilger.ca>, <jack@suse.cz>,
	<ritesh.list@gmail.com>, <ojaswin@linux.ibm.com>,
	<adobriyan@gmail.com>, <linux-kernel@vger.kernel.org>,
	<yi.zhang@huawei.com>, <yangerkun@huawei.com>,
	<libaokun1@huawei.com>
Subject: [PATCH v2 1/9] ext4: avoid overflow when setting values via sysfs
Date: Tue, 27 Feb 2024 17:11:40 +0800	[thread overview]
Message-ID: <20240227091148.178435-2-libaokun1@huawei.com> (raw)
In-Reply-To: <20240227091148.178435-1-libaokun1@huawei.com>

When setting values of type unsigned int through sysfs, we use kstrtoul()
to parse it and then truncate part of it as the final set value, when the
set value is greater than UINT_MAX, the set value will not match what we
see because of the truncation. As follows:

  $ echo 4294967296 > /sys/fs/ext4/sda/mb_max_linear_groups
  $ cat /sys/fs/ext4/sda/mb_max_linear_groups
    0

So we use kstrtouint() to parse the attr_pointer_ui type to avoid the
inconsistency described above. In addition, a judgment is added to avoid
setting s_resv_clusters less than 0.

Signed-off-by: Baokun Li <libaokun1@huawei.com>
---
 fs/ext4/sysfs.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c
index 6d332dff79dd..ca820620b974 100644
--- a/fs/ext4/sysfs.c
+++ b/fs/ext4/sysfs.c
@@ -104,7 +104,7 @@ static ssize_t reserved_clusters_store(struct ext4_sb_info *sbi,
 	int ret;
 
 	ret = kstrtoull(skip_spaces(buf), 0, &val);
-	if (ret || val >= clusters)
+	if (ret || val >= clusters || (s64)val < 0)
 		return -EINVAL;
 
 	atomic64_set(&sbi->s_resv_clusters, val);
@@ -451,7 +451,8 @@ static ssize_t ext4_attr_store(struct kobject *kobj,
 						s_kobj);
 	struct ext4_attr *a = container_of(attr, struct ext4_attr, attr);
 	void *ptr = calc_ptr(a, sbi);
-	unsigned long t;
+	unsigned int t;
+	unsigned long lt;
 	int ret;
 
 	switch (a->attr_id) {
@@ -460,7 +461,7 @@ static ssize_t ext4_attr_store(struct kobject *kobj,
 	case attr_pointer_ui:
 		if (!ptr)
 			return 0;
-		ret = kstrtoul(skip_spaces(buf), 0, &t);
+		ret = kstrtouint(skip_spaces(buf), 0, &t);
 		if (ret)
 			return ret;
 		if (a->attr_ptr == ptr_ext4_super_block_offset)
@@ -471,10 +472,10 @@ static ssize_t ext4_attr_store(struct kobject *kobj,
 	case attr_pointer_ul:
 		if (!ptr)
 			return 0;
-		ret = kstrtoul(skip_spaces(buf), 0, &t);
+		ret = kstrtoul(skip_spaces(buf), 0, &lt);
 		if (ret)
 			return ret;
-		*((unsigned long *) ptr) = t;
+		*((unsigned long *) ptr) = lt;
 		return len;
 	case attr_inode_readahead:
 		return inode_readahead_blks_store(sbi, buf, len);
-- 
2.31.1


  reply	other threads:[~2024-02-27  9:10 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-27  9:11 [PATCH v2 0/9] ext4: avoid sysfs variables overflow causing BUG_ON/SOOB Baokun Li
2024-02-27  9:11 ` Baokun Li [this message]
2024-03-14 10:16   ` [PATCH v2 1/9] ext4: avoid overflow when setting values via sysfs Jan Kara
2024-02-27  9:11 ` [PATCH v2 2/9] ext4: refactor out ext4_generic_attr_store() Baokun Li
2024-03-14 10:18   ` Jan Kara
2024-02-27  9:11 ` [PATCH v2 3/9] ext4: refactor out ext4_generic_attr_show() Baokun Li
2024-02-27  9:11 ` [PATCH v2 4/9] ext4: fix slab-out-of-bounds in ext4_mb_find_good_group_avg_frag_lists() Baokun Li
2024-03-14 10:30   ` Jan Kara
2024-03-14 11:24     ` Baokun Li
2024-03-14 12:00       ` Jan Kara
2024-03-14 12:37         ` Baokun Li
2024-03-14 12:50           ` Jan Kara
2024-03-14 13:47             ` Baokun Li
2024-02-27  9:11 ` [PATCH v2 5/9] ext4: add new attr pointer attr_mb_order Baokun Li
2024-03-14 10:32   ` Jan Kara
2024-02-27  9:11 ` [PATCH v2 6/9] ext4: add positive int attr pointer to avoid sysfs variables overflow Baokun Li
2024-03-14 10:33   ` Jan Kara
2024-02-27  9:11 ` [PATCH v2 7/9] ext4: set type of ac_groups_linear_remaining to __u32 to avoid overflow Baokun Li
2024-02-27  9:11 ` [PATCH v2 8/9] ext4: set the type of max_zeroout to unsigned int " Baokun Li
2024-03-14 10:35   ` Jan Kara
2024-02-27  9:11 ` [PATCH v2 9/9] ext4: clean up s_mb_rb_lock to fix build warnings with C=1 Baokun Li
2024-03-14 10:36   ` Jan Kara

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=20240227091148.178435-2-libaokun1@huawei.com \
    --to=libaokun1@huawei.com \
    --cc=adilger.kernel@dilger.ca \
    --cc=adobriyan@gmail.com \
    --cc=jack@suse.cz \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ojaswin@linux.ibm.com \
    --cc=ritesh.list@gmail.com \
    --cc=tytso@mit.edu \
    --cc=yangerkun@huawei.com \
    --cc=yi.zhang@huawei.com \
    /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 read-only IMAP folder(s) and NNTP newsgroup(s).