Skip to content

Commit 6fd3ec5

Browse files
committed
Merge tag 'fsverity-for-linus' of git://git.kernel.org/pub/scm/fs/fscrypt/fscrypt
Pull fsverity fix from Eric Biggers: "Fix an integer overflow when computing the Merkle tree layout of extremely large files, exposed by btrfs adding support for fs-verity" * tag 'fsverity-for-linus' of git://git.kernel.org/pub/scm/fs/fscrypt/fscrypt: fs-verity: fix signed integer overflow with i_size near S64_MAX
2 parents d33bec7 + 80f6e30 commit 6fd3ec5

File tree

2 files changed

+2
-2
lines changed

2 files changed

+2
-2
lines changed

fs/verity/enable.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ static int build_merkle_tree(struct file *filp,
177177
* (level 0) and ascending to the root node (level 'num_levels - 1').
178178
* Then at the end (level 'num_levels'), calculate the root hash.
179179
*/
180-
blocks = (inode->i_size + params->block_size - 1) >>
180+
blocks = ((u64)inode->i_size + params->block_size - 1) >>
181181
params->log_blocksize;
182182
for (level = 0; level <= params->num_levels; level++) {
183183
err = build_merkle_tree_level(filp, level, blocks, params,

fs/verity/open.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ int fsverity_init_merkle_tree_params(struct merkle_tree_params *params,
8989
*/
9090

9191
/* Compute number of levels and the number of blocks in each level */
92-
blocks = (inode->i_size + params->block_size - 1) >> log_blocksize;
92+
blocks = ((u64)inode->i_size + params->block_size - 1) >> log_blocksize;
9393
pr_debug("Data is %lld bytes (%llu blocks)\n", inode->i_size, blocks);
9494
while (blocks > 1) {
9595
if (params->num_levels >= FS_VERITY_MAX_LEVELS) {

0 commit comments

Comments
 (0)