]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
dm: Constify struct dm_block_validator
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sun, 14 Jul 2024 07:13:56 +0000 (09:13 +0200)
committerMikulas Patocka <mpatocka@redhat.com>
Fri, 19 Jul 2024 10:08:15 +0000 (12:08 +0200)
'struct dm_block_validator' are not modified in these drivers.

Constifying this structure moves some data to a read-only section, so
increase overall security.

On a x86_64, with allmodconfig, as an example:

Before:
======
   text    data     bss     dec     hex filename
  32047     920      16   32983    80d7 drivers/md/dm-cache-metadata.o

After:
=====
   text    data     bss     dec     hex filename
  32075     896      16   32987    80db drivers/md/dm-cache-metadata.o

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
12 files changed:
drivers/md/dm-cache-metadata.c
drivers/md/dm-clone-metadata.c
drivers/md/dm-era-target.c
drivers/md/dm-thin-metadata.c
drivers/md/persistent-data/dm-array.c
drivers/md/persistent-data/dm-block-manager.c
drivers/md/persistent-data/dm-block-manager.h
drivers/md/persistent-data/dm-btree-internal.h
drivers/md/persistent-data/dm-btree-spine.c
drivers/md/persistent-data/dm-space-map-common.c
drivers/md/persistent-data/dm-transaction-manager.c
drivers/md/persistent-data/dm-transaction-manager.h

index 0ad9dc1824fa2b2a2a6a349ccc1c91c1b57bdda2..24cd87fddf752bd8060ac577aa61394b48ab91fd 100644 (file)
@@ -170,7 +170,7 @@ struct dm_cache_metadata {
  */
 #define SUPERBLOCK_CSUM_XOR 9031977
 
-static void sb_prepare_for_write(struct dm_block_validator *v,
+static void sb_prepare_for_write(const struct dm_block_validator *v,
                                 struct dm_block *b,
                                 size_t sb_block_size)
 {
@@ -195,7 +195,7 @@ static int check_metadata_version(struct cache_disk_superblock *disk_super)
        return 0;
 }
 
-static int sb_check(struct dm_block_validator *v,
+static int sb_check(const struct dm_block_validator *v,
                    struct dm_block *b,
                    size_t sb_block_size)
 {
@@ -228,7 +228,7 @@ static int sb_check(struct dm_block_validator *v,
        return check_metadata_version(disk_super);
 }
 
-static struct dm_block_validator sb_validator = {
+static const struct dm_block_validator sb_validator = {
        .name = "superblock",
        .prepare_for_write = sb_prepare_for_write,
        .check = sb_check
index 47c1fa7aad8b5b993af919b9ae98cdaa0f3f0559..2db84cd2202b068d069fa982bd6b3de04a9b9b3f 100644 (file)
@@ -163,7 +163,7 @@ struct dm_clone_metadata {
 /*
  * Superblock validation.
  */
-static void sb_prepare_for_write(struct dm_block_validator *v,
+static void sb_prepare_for_write(const struct dm_block_validator *v,
                                 struct dm_block *b, size_t sb_block_size)
 {
        struct superblock_disk *sb;
@@ -177,7 +177,7 @@ static void sb_prepare_for_write(struct dm_block_validator *v,
        sb->csum = cpu_to_le32(csum);
 }
 
-static int sb_check(struct dm_block_validator *v, struct dm_block *b,
+static int sb_check(const struct dm_block_validator *v, struct dm_block *b,
                    size_t sb_block_size)
 {
        struct superblock_disk *sb;
@@ -220,7 +220,7 @@ static int sb_check(struct dm_block_validator *v, struct dm_block *b,
        return 0;
 }
 
-static struct dm_block_validator sb_validator = {
+static const struct dm_block_validator sb_validator = {
        .name = "superblock",
        .prepare_for_write = sb_prepare_for_write,
        .check = sb_check
index e627781b1420e3dc9fdd6be249df809c8169991c..9c84e9d13eca6d0c94d1aa99a48bd9df22057e81 100644 (file)
@@ -196,7 +196,7 @@ struct superblock_disk {
  * Superblock validation
  *--------------------------------------------------------------
  */
-static void sb_prepare_for_write(struct dm_block_validator *v,
+static void sb_prepare_for_write(const struct dm_block_validator *v,
                                 struct dm_block *b,
                                 size_t sb_block_size)
 {
@@ -221,7 +221,7 @@ static int check_metadata_version(struct superblock_disk *disk)
        return 0;
 }
 
-static int sb_check(struct dm_block_validator *v,
+static int sb_check(const struct dm_block_validator *v,
                    struct dm_block *b,
                    size_t sb_block_size)
 {
@@ -254,7 +254,7 @@ static int sb_check(struct dm_block_validator *v,
        return check_metadata_version(disk);
 }
 
-static struct dm_block_validator sb_validator = {
+static const struct dm_block_validator sb_validator = {
        .name = "superblock",
        .prepare_for_write = sb_prepare_for_write,
        .check = sb_check
index 6022189c13887bbe81c918effb83217c3886fd8c..f90679cfec5bb2782d3c1420f89fb2723225d7e0 100644 (file)
@@ -249,7 +249,7 @@ struct dm_thin_device {
  */
 #define SUPERBLOCK_CSUM_XOR 160774
 
-static void sb_prepare_for_write(struct dm_block_validator *v,
+static void sb_prepare_for_write(const struct dm_block_validator *v,
                                 struct dm_block *b,
                                 size_t block_size)
 {
@@ -261,7 +261,7 @@ static void sb_prepare_for_write(struct dm_block_validator *v,
                                                      SUPERBLOCK_CSUM_XOR));
 }
 
-static int sb_check(struct dm_block_validator *v,
+static int sb_check(const struct dm_block_validator *v,
                    struct dm_block *b,
                    size_t block_size)
 {
@@ -294,7 +294,7 @@ static int sb_check(struct dm_block_validator *v,
        return 0;
 }
 
-static struct dm_block_validator sb_validator = {
+static const struct dm_block_validator sb_validator = {
        .name = "superblock",
        .prepare_for_write = sb_prepare_for_write,
        .check = sb_check
index 798c9c53a343537be9b55ddbc59b83eb7b76b15f..157c9bd2fed741fdea908cc8893355bd711bef7d 100644 (file)
@@ -38,7 +38,7 @@ struct array_block {
  */
 #define CSUM_XOR 595846735
 
-static void array_block_prepare_for_write(struct dm_block_validator *v,
+static void array_block_prepare_for_write(const struct dm_block_validator *v,
                                          struct dm_block *b,
                                          size_t size_of_block)
 {
@@ -50,7 +50,7 @@ static void array_block_prepare_for_write(struct dm_block_validator *v,
                                                 CSUM_XOR));
 }
 
-static int array_block_check(struct dm_block_validator *v,
+static int array_block_check(const struct dm_block_validator *v,
                             struct dm_block *b,
                             size_t size_of_block)
 {
@@ -77,7 +77,7 @@ static int array_block_check(struct dm_block_validator *v,
        return 0;
 }
 
-static struct dm_block_validator array_validator = {
+static const struct dm_block_validator array_validator = {
        .name = "array",
        .prepare_for_write = array_block_prepare_for_write,
        .check = array_block_check
index b17b54df673b2f42b4456750db07b759cd67e1c1..1ef71e5fcde736cd2906cdfdba791f57c78bc3dd 100644 (file)
@@ -345,7 +345,7 @@ void *dm_block_data(struct dm_block *b)
 EXPORT_SYMBOL_GPL(dm_block_data);
 
 struct buffer_aux {
-       struct dm_block_validator *validator;
+       const struct dm_block_validator *validator;
        int write_locked;
 
 #ifdef CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING
@@ -441,7 +441,7 @@ dm_block_t dm_bm_nr_blocks(struct dm_block_manager *bm)
 static int dm_bm_validate_buffer(struct dm_block_manager *bm,
                                 struct dm_buffer *buf,
                                 struct buffer_aux *aux,
-                                struct dm_block_validator *v)
+                                const struct dm_block_validator *v)
 {
        if (unlikely(!aux->validator)) {
                int r;
@@ -467,7 +467,7 @@ static int dm_bm_validate_buffer(struct dm_block_manager *bm,
        return 0;
 }
 int dm_bm_read_lock(struct dm_block_manager *bm, dm_block_t b,
-                   struct dm_block_validator *v,
+                   const struct dm_block_validator *v,
                    struct dm_block **result)
 {
        struct buffer_aux *aux;
@@ -500,7 +500,7 @@ int dm_bm_read_lock(struct dm_block_manager *bm, dm_block_t b,
 EXPORT_SYMBOL_GPL(dm_bm_read_lock);
 
 int dm_bm_write_lock(struct dm_block_manager *bm,
-                    dm_block_t b, struct dm_block_validator *v,
+                    dm_block_t b, const struct dm_block_validator *v,
                     struct dm_block **result)
 {
        struct buffer_aux *aux;
@@ -536,7 +536,7 @@ int dm_bm_write_lock(struct dm_block_manager *bm,
 EXPORT_SYMBOL_GPL(dm_bm_write_lock);
 
 int dm_bm_read_try_lock(struct dm_block_manager *bm,
-                       dm_block_t b, struct dm_block_validator *v,
+                       dm_block_t b, const struct dm_block_validator *v,
                        struct dm_block **result)
 {
        struct buffer_aux *aux;
@@ -569,7 +569,7 @@ int dm_bm_read_try_lock(struct dm_block_manager *bm,
 }
 
 int dm_bm_write_lock_zero(struct dm_block_manager *bm,
-                         dm_block_t b, struct dm_block_validator *v,
+                         dm_block_t b, const struct dm_block_validator *v,
                          struct dm_block **result)
 {
        int r;
index f706d3de8d5a15ae074ce4aea465d414ed96b29b..b1998968594c9ae14768998779ae732d776cd68c 100644 (file)
@@ -51,12 +51,14 @@ dm_block_t dm_bm_nr_blocks(struct dm_block_manager *bm);
  */
 struct dm_block_validator {
        const char *name;
-       void (*prepare_for_write)(struct dm_block_validator *v, struct dm_block *b, size_t block_size);
+       void (*prepare_for_write)(const struct dm_block_validator *v,
+                                 struct dm_block *b, size_t block_size);
 
        /*
         * Return 0 if the checksum is valid or < 0 on error.
         */
-       int (*check)(struct dm_block_validator *v, struct dm_block *b, size_t block_size);
+       int (*check)(const struct dm_block_validator *v,
+                    struct dm_block *b, size_t block_size);
 };
 
 /*----------------------------------------------------------------*/
@@ -73,11 +75,11 @@ struct dm_block_validator {
  * written back to the disk sometime after dm_bm_unlock is called.
  */
 int dm_bm_read_lock(struct dm_block_manager *bm, dm_block_t b,
-                   struct dm_block_validator *v,
+                   const struct dm_block_validator *v,
                    struct dm_block **result);
 
 int dm_bm_write_lock(struct dm_block_manager *bm, dm_block_t b,
-                    struct dm_block_validator *v,
+                    const struct dm_block_validator *v,
                     struct dm_block **result);
 
 /*
@@ -85,7 +87,7 @@ int dm_bm_write_lock(struct dm_block_manager *bm, dm_block_t b,
  * available immediately.
  */
 int dm_bm_read_try_lock(struct dm_block_manager *bm, dm_block_t b,
-                       struct dm_block_validator *v,
+                       const struct dm_block_validator *v,
                        struct dm_block **result);
 
 /*
@@ -93,7 +95,7 @@ int dm_bm_read_try_lock(struct dm_block_manager *bm, dm_block_t b,
  * overwrite the block completely.  It saves a disk read.
  */
 int dm_bm_write_lock_zero(struct dm_block_manager *bm, dm_block_t b,
-                         struct dm_block_validator *v,
+                         const struct dm_block_validator *v,
                          struct dm_block **result);
 
 void dm_bm_unlock(struct dm_block *b);
index 7ed2ce656fccfc0b81af7130282a6ad13fc85d53..acebd32858a7f5116c361cc2bf278bfec864d80d 100644 (file)
@@ -138,7 +138,7 @@ static inline uint64_t value64(struct btree_node *n, uint32_t index)
  */
 int lower_bound(struct btree_node *n, uint64_t key);
 
-extern struct dm_block_validator btree_node_validator;
+extern const struct dm_block_validator btree_node_validator;
 
 /*
  * Value type for upper levels of multi-level btrees.
index 7540383b7cf3e940baf8b5fee6f755bde0606516..c46fc50c274e246d0656e5bf61e25f67b82e18b0 100644 (file)
@@ -16,7 +16,7 @@
 
 #define BTREE_CSUM_XOR 121107
 
-static void node_prepare_for_write(struct dm_block_validator *v,
+static void node_prepare_for_write(const struct dm_block_validator *v,
                                   struct dm_block *b,
                                   size_t block_size)
 {
@@ -29,7 +29,7 @@ static void node_prepare_for_write(struct dm_block_validator *v,
                                             BTREE_CSUM_XOR));
 }
 
-static int node_check(struct dm_block_validator *v,
+static int node_check(const struct dm_block_validator *v,
                      struct dm_block *b,
                      size_t block_size)
 {
@@ -81,7 +81,7 @@ static int node_check(struct dm_block_validator *v,
        return 0;
 }
 
-struct dm_block_validator btree_node_validator = {
+const struct dm_block_validator btree_node_validator = {
        .name = "btree_node",
        .prepare_for_write = node_prepare_for_write,
        .check = node_check
index 591d1a43d0357216874d190334ac5eaeb5fffbe1..3a19124ee27932c9d7d25305a04f9c79a15131dd 100644 (file)
@@ -22,7 +22,7 @@
  */
 #define INDEX_CSUM_XOR 160478
 
-static void index_prepare_for_write(struct dm_block_validator *v,
+static void index_prepare_for_write(const struct dm_block_validator *v,
                                    struct dm_block *b,
                                    size_t block_size)
 {
@@ -34,7 +34,7 @@ static void index_prepare_for_write(struct dm_block_validator *v,
                                                 INDEX_CSUM_XOR));
 }
 
-static int index_check(struct dm_block_validator *v,
+static int index_check(const struct dm_block_validator *v,
                       struct dm_block *b,
                       size_t block_size)
 {
@@ -59,7 +59,7 @@ static int index_check(struct dm_block_validator *v,
        return 0;
 }
 
-static struct dm_block_validator index_validator = {
+static const struct dm_block_validator index_validator = {
        .name = "index",
        .prepare_for_write = index_prepare_for_write,
        .check = index_check
@@ -72,7 +72,7 @@ static struct dm_block_validator index_validator = {
  */
 #define BITMAP_CSUM_XOR 240779
 
-static void dm_bitmap_prepare_for_write(struct dm_block_validator *v,
+static void dm_bitmap_prepare_for_write(const struct dm_block_validator *v,
                                        struct dm_block *b,
                                        size_t block_size)
 {
@@ -84,7 +84,7 @@ static void dm_bitmap_prepare_for_write(struct dm_block_validator *v,
                                                       BITMAP_CSUM_XOR));
 }
 
-static int dm_bitmap_check(struct dm_block_validator *v,
+static int dm_bitmap_check(const struct dm_block_validator *v,
                           struct dm_block *b,
                           size_t block_size)
 {
@@ -109,7 +109,7 @@ static int dm_bitmap_check(struct dm_block_validator *v,
        return 0;
 }
 
-static struct dm_block_validator dm_sm_bitmap_validator = {
+static const struct dm_block_validator dm_sm_bitmap_validator = {
        .name = "sm_bitmap",
        .prepare_for_write = dm_bitmap_prepare_for_write,
        .check = dm_bitmap_check,
index c88fa62662035a02d488f8a43353404ce2d30422..c7ba4e6cbbc7e9ed4237ea0345a3ab0c0da6b2df 100644 (file)
@@ -237,7 +237,7 @@ int dm_tm_commit(struct dm_transaction_manager *tm, struct dm_block *root)
 EXPORT_SYMBOL_GPL(dm_tm_commit);
 
 int dm_tm_new_block(struct dm_transaction_manager *tm,
-                   struct dm_block_validator *v,
+                   const struct dm_block_validator *v,
                    struct dm_block **result)
 {
        int r;
@@ -266,7 +266,7 @@ int dm_tm_new_block(struct dm_transaction_manager *tm,
 }
 
 static int __shadow_block(struct dm_transaction_manager *tm, dm_block_t orig,
-                         struct dm_block_validator *v,
+                         const struct dm_block_validator *v,
                          struct dm_block **result)
 {
        int r;
@@ -306,7 +306,7 @@ static int __shadow_block(struct dm_transaction_manager *tm, dm_block_t orig,
 }
 
 int dm_tm_shadow_block(struct dm_transaction_manager *tm, dm_block_t orig,
-                      struct dm_block_validator *v, struct dm_block **result,
+                      const struct dm_block_validator *v, struct dm_block **result,
                       int *inc_children)
 {
        int r;
@@ -331,7 +331,7 @@ int dm_tm_shadow_block(struct dm_transaction_manager *tm, dm_block_t orig,
 EXPORT_SYMBOL_GPL(dm_tm_shadow_block);
 
 int dm_tm_read_lock(struct dm_transaction_manager *tm, dm_block_t b,
-                   struct dm_block_validator *v,
+                   const struct dm_block_validator *v,
                    struct dm_block **blk)
 {
        if (tm->is_clone) {
index 01f7e650118d23476704231c460d01ab446439fc..61a8d10825caec4a84989b05c026c9c73b183891 100644 (file)
@@ -64,7 +64,7 @@ int dm_tm_commit(struct dm_transaction_manager *tm, struct dm_block *superblock)
  * Zeroes the new block and returns with write lock held.
  */
 int dm_tm_new_block(struct dm_transaction_manager *tm,
-                   struct dm_block_validator *v,
+                   const struct dm_block_validator *v,
                    struct dm_block **result);
 
 /*
@@ -84,7 +84,7 @@ int dm_tm_new_block(struct dm_transaction_manager *tm,
  * it locked when you call this.
  */
 int dm_tm_shadow_block(struct dm_transaction_manager *tm, dm_block_t orig,
-                      struct dm_block_validator *v,
+                      const struct dm_block_validator *v,
                       struct dm_block **result, int *inc_children);
 
 /*
@@ -92,7 +92,7 @@ int dm_tm_shadow_block(struct dm_transaction_manager *tm, dm_block_t orig,
  * on it outstanding then it'll block.
  */
 int dm_tm_read_lock(struct dm_transaction_manager *tm, dm_block_t b,
-                   struct dm_block_validator *v,
+                   const struct dm_block_validator *v,
                    struct dm_block **result);
 
 void dm_tm_unlock(struct dm_transaction_manager *tm, struct dm_block *b);