btrfs: sysfs: validate scrub_speed_max value
authorDavid Disseldorp <ddiss@suse.de>
Fri, 8 Dec 2023 00:41:56 +0000 (11:41 +1100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 1 Feb 2024 00:18:49 +0000 (16:18 -0800)
commit 2b0122aaa800b021e36027d7f29e206f87c761d6 upstream.

The value set as scrub_speed_max accepts size with suffixes
(k/m/g/t/p/e) but we should still validate it for trailing characters,
similar to what we do with chunk_size_store.

CC: stable@vger.kernel.org # 5.15+
Signed-off-by: David Disseldorp <ddiss@suse.de>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/btrfs/sysfs.c

index b1d1ac2..c919872 100644 (file)
@@ -1760,6 +1760,10 @@ static ssize_t btrfs_devinfo_scrub_speed_max_store(struct kobject *kobj,
        unsigned long long limit;
 
        limit = memparse(buf, &endptr);
+       /* There could be trailing '\n', also catch any typos after the value. */
+       endptr = skip_spaces(endptr);
+       if (*endptr != 0)
+               return -EINVAL;
        WRITE_ONCE(device->scrub_speed_max, limit);
        return len;
 }