btrfs: use unsigned types for constants defined as bit shifts
authorDavid Sterba <dsterba@suse.com>
Tue, 22 Apr 2025 15:55:41 +0000 (17:55 +0200)
committerDavid Sterba <dsterba@suse.com>
Thu, 15 May 2025 12:30:48 +0000 (14:30 +0200)
The unsigned type is a recommended practice (CWE-190, CWE-194) for bit
shifts to avoid problems with potential unwanted sign extensions.
Although there are no such cases in btrfs codebase, follow the
recommendation.

Reviewed-by: Boris Burkov <boris@bur.io>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/backref.h
fs/btrfs/direct-io.c
fs/btrfs/extent_io.h
fs/btrfs/inode.c
fs/btrfs/ordered-data.c
fs/btrfs/raid56.c
fs/btrfs/tests/extent-io-tests.c
fs/btrfs/zstd.c

index 74e6140312747f9e4247f3e5aa0288a1595c2b63..953637115956b99ee2cee6d07a45f14701b88bcb 100644 (file)
@@ -423,8 +423,8 @@ struct btrfs_backref_node *btrfs_backref_alloc_node(
 struct btrfs_backref_edge *btrfs_backref_alloc_edge(
                struct btrfs_backref_cache *cache);
 
-#define                LINK_LOWER      (1 << 0)
-#define                LINK_UPPER      (1 << 1)
+#define                LINK_LOWER      (1U << 0)
+#define                LINK_UPPER      (1U << 1)
 
 void btrfs_backref_link_edge(struct btrfs_backref_edge *edge,
                             struct btrfs_backref_node *lower,
index 3a03142dee099b86f7eb78e9f50d67c0b3d10f35..fde612d9b077e3be5b1c18d8b17c6fdb5e0ff0b2 100644 (file)
@@ -151,8 +151,8 @@ static struct extent_map *btrfs_create_dio_extent(struct btrfs_inode *inode,
        }
 
        ordered = btrfs_alloc_ordered_extent(inode, start, file_extent,
-                                            (1 << type) |
-                                            (1 << BTRFS_ORDERED_DIRECT));
+                                            (1U << type) |
+                                            (1U << BTRFS_ORDERED_DIRECT));
        if (IS_ERR(ordered)) {
                if (em) {
                        btrfs_free_extent_map(em);
index a2a3d4d15ade43c137543aa432f7112fd0f3ea3e..e8b92340b65a8c3779b86b18973112ac8f663867 100644 (file)
@@ -73,7 +73,7 @@ enum {
  *    single word in a bitmap may straddle two pages in the extent buffer.
  */
 #define BIT_BYTE(nr) ((nr) / BITS_PER_BYTE)
-#define BYTE_MASK ((1 << BITS_PER_BYTE) - 1)
+#define BYTE_MASK ((1U << BITS_PER_BYTE) - 1)
 #define BITMAP_FIRST_BYTE_MASK(start) \
        ((BYTE_MASK << ((start) & (BITS_PER_BYTE - 1))) & BYTE_MASK)
 #define BITMAP_LAST_BYTE_MASK(nbits) \
index 080052f771e90834dac98292aa85578866bd9825..7f64725b95b3282a34e6985a5f4aee1018aba92c 100644 (file)
@@ -1154,7 +1154,7 @@ static void submit_one_async_extent(struct async_chunk *async_chunk,
        btrfs_free_extent_map(em);
 
        ordered = btrfs_alloc_ordered_extent(inode, start, &file_extent,
-                                            1 << BTRFS_ORDERED_COMPRESSED);
+                                            1U << BTRFS_ORDERED_COMPRESSED);
        if (IS_ERR(ordered)) {
                btrfs_drop_extent_map_range(inode, start, end, false);
                ret = PTR_ERR(ordered);
@@ -1401,7 +1401,7 @@ static noinline int cow_file_range(struct btrfs_inode *inode,
                btrfs_free_extent_map(em);
 
                ordered = btrfs_alloc_ordered_extent(inode, start, &file_extent,
-                                                    1 << BTRFS_ORDERED_REGULAR);
+                                                    1U << BTRFS_ORDERED_REGULAR);
                if (IS_ERR(ordered)) {
                        btrfs_unlock_extent(&inode->io_tree, start,
                                            start + cur_alloc_size - 1, &cached);
@@ -1981,8 +1981,8 @@ static int nocow_one_range(struct btrfs_inode *inode, struct folio *locked_folio
 
        ordered = btrfs_alloc_ordered_extent(inode, file_pos, &nocow_args->file_extent,
                                             is_prealloc
-                                            ? (1 << BTRFS_ORDERED_PREALLOC)
-                                            : (1 << BTRFS_ORDERED_NOCOW));
+                                            ? (1U << BTRFS_ORDERED_PREALLOC)
+                                            : (1U << BTRFS_ORDERED_NOCOW));
        if (IS_ERR(ordered)) {
                if (is_prealloc)
                        btrfs_drop_extent_map_range(inode, file_pos, end, false);
@@ -9690,8 +9690,8 @@ ssize_t btrfs_do_encoded_write(struct kiocb *iocb, struct iov_iter *from,
        btrfs_free_extent_map(em);
 
        ordered = btrfs_alloc_ordered_extent(inode, start, &file_extent,
-                                      (1 << BTRFS_ORDERED_ENCODED) |
-                                      (1 << BTRFS_ORDERED_COMPRESSED));
+                                      (1U << BTRFS_ORDERED_ENCODED) |
+                                      (1U << BTRFS_ORDERED_COMPRESSED));
        if (IS_ERR(ordered)) {
                btrfs_drop_extent_map_range(inode, start, end, false);
                ret = PTR_ERR(ordered);
index b5b544712e93a36cd3f39bcdfad6a7aab5bce588..6151d32704d2da30328e146047d8dcb6f8551ccd 100644 (file)
@@ -155,7 +155,7 @@ static struct btrfs_ordered_extent *alloc_ordered_extent(
        u64 qgroup_rsv = 0;
 
        if (flags &
-           ((1 << BTRFS_ORDERED_NOCOW) | (1 << BTRFS_ORDERED_PREALLOC))) {
+           ((1U << BTRFS_ORDERED_NOCOW) | (1U << BTRFS_ORDERED_PREALLOC))) {
                /* For nocow write, we can release the qgroup rsv right now */
                ret = btrfs_qgroup_free_data(inode, NULL, file_offset, num_bytes, &qgroup_rsv);
                if (ret < 0)
@@ -253,7 +253,7 @@ static void insert_ordered_extent(struct btrfs_ordered_extent *entry)
  * @disk_bytenr:     Offset of extent on disk.
  * @disk_num_bytes:  Size of extent on disk.
  * @offset:          Offset into unencoded data where file data starts.
- * @flags:           Flags specifying type of extent (1 << BTRFS_ORDERED_*).
+ * @flags:           Flags specifying type of extent (1U << BTRFS_ORDERED_*).
  * @compress_type:   Compression algorithm used for data.
  *
  * Most of these parameters correspond to &struct btrfs_file_extent_item. The
index 99488a5407d681166612f11b289591108022b15b..bb9ae0e281d9fa470c294957f59e1a569105f5d3 100644 (file)
@@ -203,8 +203,7 @@ int btrfs_alloc_stripe_hash_table(struct btrfs_fs_info *info)
        struct btrfs_stripe_hash_table *x;
        struct btrfs_stripe_hash *cur;
        struct btrfs_stripe_hash *h;
-       int num_entries = 1 << BTRFS_STRIPE_HASH_TABLE_BITS;
-       int i;
+       unsigned int num_entries = 1U << BTRFS_STRIPE_HASH_TABLE_BITS;
 
        if (info->stripe_hash_table)
                return 0;
@@ -225,7 +224,7 @@ int btrfs_alloc_stripe_hash_table(struct btrfs_fs_info *info)
 
        h = table->table;
 
-       for (i = 0; i < num_entries; i++) {
+       for (unsigned int i = 0; i < num_entries; i++) {
                cur = h + i;
                INIT_LIST_HEAD(&cur->hash_list);
                spin_lock_init(&cur->lock);
index 6d1f8d62c5a08ad597afd07fd20d4c5124eb68d5..00da54f0164c9436518576eb066e20f88cf0207f 100644 (file)
@@ -14,9 +14,9 @@
 #include "../disk-io.h"
 #include "../btrfs_inode.h"
 
-#define PROCESS_UNLOCK         (1 << 0)
-#define PROCESS_RELEASE                (1 << 1)
-#define PROCESS_TEST_LOCKED    (1 << 2)
+#define PROCESS_UNLOCK         (1U << 0)
+#define PROCESS_RELEASE                (1U << 1)
+#define PROCESS_TEST_LOCKED    (1U << 2)
 
 static noinline int process_page_range(struct inode *inode, u64 start, u64 end,
                                       unsigned long flags)
index 75efca4da194c6a7e7ddaa5594b59d6c87410c37..4a796a049b5a2473bf8a65869fe452e4b4b5c35e 100644 (file)
@@ -24,7 +24,7 @@
 #include "super.h"
 
 #define ZSTD_BTRFS_MAX_WINDOWLOG 17
-#define ZSTD_BTRFS_MAX_INPUT (1 << ZSTD_BTRFS_MAX_WINDOWLOG)
+#define ZSTD_BTRFS_MAX_INPUT (1U << ZSTD_BTRFS_MAX_WINDOWLOG)
 #define ZSTD_BTRFS_DEFAULT_LEVEL 3
 #define ZSTD_BTRFS_MIN_LEVEL -15
 #define ZSTD_BTRFS_MAX_LEVEL 15