f2fs: fix to do cast in F2FS_{BLK_TO_BYTES, BTYES_TO_BLK} to avoid overflow
authorChao Yu <chao@kernel.org>
Fri, 8 Nov 2024 01:25:54 +0000 (09:25 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Thu, 21 Nov 2024 16:12:29 +0000 (16:12 +0000)
It missed to cast variable to unsigned long long type before
bit shift, which will cause overflow, fix it.

Fixes: f7ef9b83b583 ("f2fs: introduce macros to convert bytes and blocks in f2fs")
Signed-off-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/super.c
include/linux/f2fs_fs.h

index 7bcd647..0097a57 100644 (file)
@@ -3344,7 +3344,7 @@ loff_t max_file_blocks(struct inode *inode)
         * fit within U32_MAX + 1 data units.
         */
 
-       result = min(result, F2FS_BYTES_TO_BLK(((loff_t)U32_MAX + 1) * 4096));
+       result = umin(result, F2FS_BYTES_TO_BLK(((loff_t)U32_MAX + 1) * 4096));
 
        return result;
 }
index b0b821e..3b2ad44 100644 (file)
 #define NEW_ADDR               ((block_t)-1)   /* used as block_t addresses */
 #define COMPRESS_ADDR          ((block_t)-2)   /* used as compressed data flag */
 
-#define F2FS_BYTES_TO_BLK(bytes)       ((bytes) >> F2FS_BLKSIZE_BITS)
-#define F2FS_BLK_TO_BYTES(blk)         ((blk) << F2FS_BLKSIZE_BITS)
+#define F2FS_BYTES_TO_BLK(bytes)       ((unsigned long long)(bytes) >> F2FS_BLKSIZE_BITS)
+#define F2FS_BLK_TO_BYTES(blk)         ((unsigned long long)(blk) << F2FS_BLKSIZE_BITS)
 #define F2FS_BLK_END_BYTES(blk)                (F2FS_BLK_TO_BYTES(blk + 1) - 1)
-#define F2FS_BLK_ALIGN(x)                      (F2FS_BYTES_TO_BLK((x) + F2FS_BLKSIZE - 1))
+#define F2FS_BLK_ALIGN(x)              (F2FS_BYTES_TO_BLK((x) + F2FS_BLKSIZE - 1))
 
 /* 0, 1(node nid), 2(meta nid) are reserved node id */
 #define F2FS_RESERVED_NODE_NUM         3