f2fs: fix to avoid out-of-boundary access in devs.path
authorChao Yu <chao@kernel.org>
Fri, 11 Jul 2025 07:14:50 +0000 (15:14 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 22 Jul 2025 15:58:13 +0000 (15:58 +0000)
- touch /mnt/f2fs/012345678901234567890123456789012345678901234567890123
- truncate -s $((1024*1024*1024)) \
  /mnt/f2fs/012345678901234567890123456789012345678901234567890123
- touch /mnt/f2fs/file
- truncate -s $((1024*1024*1024)) /mnt/f2fs/file
- mkfs.f2fs /mnt/f2fs/012345678901234567890123456789012345678901234567890123 \
  -c /mnt/f2fs/file
- mount /mnt/f2fs/012345678901234567890123456789012345678901234567890123 \
  /mnt/f2fs/loop

[16937.192225] F2FS-fs (loop0): Mount Device [ 0]: /mnt/f2fs/012345678901234567890123456789012345678901234567890123\xff\x01,      511,        0 -    3ffff
[16937.192268] F2FS-fs (loop0): Failed to find devices

If device path length equals to MAX_PATH_LEN, sbi->devs.path[] may
not end up w/ null character due to path array is fully filled, So
accidently, fields locate after path[] may be treated as part of
device path, result in parsing wrong device path.

struct f2fs_dev_info {
...
char path[MAX_PATH_LEN];
...
};

Let's add one byte space for sbi->devs.path[] to store null
character of device path string.

Fixes: 3c62be17d4f5 ("f2fs: support multiple devices")
Signed-off-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/f2fs.h

index b2cc22b29d6a9d0dd0308dbb544dee1fd8eb2641..dfddb66910b3f1ecc305d8241cf9ba2f28431ccf 100644 (file)
@@ -1289,7 +1289,7 @@ struct f2fs_bio_info {
 struct f2fs_dev_info {
        struct file *bdev_file;
        struct block_device *bdev;
-       char path[MAX_PATH_LEN];
+       char path[MAX_PATH_LEN + 1];
        unsigned int total_segments;
        block_t start_blk;
        block_t end_blk;