fsverity: use WARN_ON_ONCE instead of WARN_ON
authorEric Biggers <ebiggers@google.com>
Tue, 28 Mar 2023 04:03:26 +0000 (21:03 -0700)
committerEric Biggers <ebiggers@google.com>
Wed, 12 Apr 2023 02:23:15 +0000 (19:23 -0700)
As per Linus's suggestion
(https://lore.kernel.org/r/CAHk-=whefxRGyNGzCzG6BVeM=5vnvgb-XhSeFJVxJyAxAF8XRA@mail.gmail.com),
use WARN_ON_ONCE instead of WARN_ON.  This barely adds any extra
overhead, and it makes it so that if any of these ever becomes reachable
(they shouldn't, but that's the point), the logs can't be flooded.

Link: https://lore.kernel.org/r/20230406181542.38894-1-ebiggers@kernel.org
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Eric Biggers <ebiggers@google.com>
fs/verity/enable.c
fs/verity/hash_algs.c
fs/verity/open.c
include/linux/fsverity.h

index 7a0e3a84d370bc1d3a320762c7781fd4f752ec14..541c2a277c5c6d8ee22c99e13a0f18bc96784465 100644 (file)
@@ -165,7 +165,7 @@ static int build_merkle_tree(struct file *filp,
                }
        }
        /* The root hash was filled by the last call to hash_one_block(). */
-       if (WARN_ON(buffers[num_levels].filled != params->digest_size)) {
+       if (WARN_ON_ONCE(buffers[num_levels].filled != params->digest_size)) {
                err = -EINVAL;
                goto out;
        }
@@ -277,7 +277,7 @@ static int enable_verity(struct file *filp,
                fsverity_err(inode, "%ps() failed with err %d",
                             vops->end_enable_verity, err);
                fsverity_free_info(vi);
-       } else if (WARN_ON(!IS_VERITY(inode))) {
+       } else if (WARN_ON_ONCE(!IS_VERITY(inode))) {
                err = -EINVAL;
                fsverity_free_info(vi);
        } else {
index 13fcf31be8441fbf5eb2e49511fc743df8174189..ea00dbedf756bb72b79e25cf2c3aee571bbcf3d9 100644 (file)
@@ -84,9 +84,9 @@ struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode,
        }
 
        err = -EINVAL;
-       if (WARN_ON(alg->digest_size != crypto_ahash_digestsize(tfm)))
+       if (WARN_ON_ONCE(alg->digest_size != crypto_ahash_digestsize(tfm)))
                goto err_free_tfm;
-       if (WARN_ON(alg->block_size != crypto_ahash_blocksize(tfm)))
+       if (WARN_ON_ONCE(alg->block_size != crypto_ahash_blocksize(tfm)))
                goto err_free_tfm;
 
        err = mempool_init_kmalloc_pool(&alg->req_pool, 1,
index 9366b441d01ca8099427fd8fe00ce57a0fc168d2..52048b7630dcc76d127d5d4058e631ea6fd2b5c6 100644 (file)
@@ -83,7 +83,7 @@ int fsverity_init_merkle_tree_params(struct merkle_tree_params *params,
        params->log_blocks_per_page = PAGE_SHIFT - log_blocksize;
        params->blocks_per_page = 1 << params->log_blocks_per_page;
 
-       if (WARN_ON(!is_power_of_2(params->digest_size))) {
+       if (WARN_ON_ONCE(!is_power_of_2(params->digest_size))) {
                err = -EINVAL;
                goto out_err;
        }
index 119a3266791fdab292200ebf422766b92e677287..e76605d5b36eeb78921ea0af1c6813f4062d94de 100644 (file)
@@ -233,18 +233,18 @@ static inline int fsverity_ioctl_read_metadata(struct file *filp,
 static inline bool fsverity_verify_blocks(struct folio *folio, size_t len,
                                          size_t offset)
 {
-       WARN_ON(1);
+       WARN_ON_ONCE(1);
        return false;
 }
 
 static inline void fsverity_verify_bio(struct bio *bio)
 {
-       WARN_ON(1);
+       WARN_ON_ONCE(1);
 }
 
 static inline void fsverity_enqueue_verify_work(struct work_struct *work)
 {
-       WARN_ON(1);
+       WARN_ON_ONCE(1);
 }
 
 #endif /* !CONFIG_FS_VERITY */