Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

dm-verity: make verity_hash() take dm_verity_io instead of ahash_request

In preparation for adding shash support to dm-verity, change
verity_hash() to take a pointer to a struct dm_verity_io instead of a
pointer to the ahash_request embedded inside it.

Reviewed-by: Sami Tolvanen <samitolvanen@google.com>
Acked-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>

authored by

Eric Biggers and committed by
Mikulas Patocka
e8f5e933 cf715f4b

+13 -16
+2 -4
drivers/md/dm-verity-fec.c
··· 186 186 static int fec_is_erasure(struct dm_verity *v, struct dm_verity_io *io, 187 187 u8 *want_digest, u8 *data) 188 188 { 189 - if (unlikely(verity_hash(v, verity_io_hash_req(v, io), 190 - data, 1 << v->data_dev_block_bits, 189 + if (unlikely(verity_hash(v, io, data, 1 << v->data_dev_block_bits, 191 190 verity_io_real_digest(v, io), true))) 192 191 return 0; 193 192 ··· 387 388 } 388 389 389 390 /* Always re-validate the corrected block against the expected hash */ 390 - r = verity_hash(v, verity_io_hash_req(v, io), fio->output, 391 - 1 << v->data_dev_block_bits, 391 + r = verity_hash(v, io, fio->output, 1 << v->data_dev_block_bits, 392 392 verity_io_real_digest(v, io), true); 393 393 if (unlikely(r < 0)) 394 394 return r;
+10 -11
drivers/md/dm-verity-target.c
··· 180 180 return r; 181 181 } 182 182 183 - int verity_hash(struct dm_verity *v, struct ahash_request *req, 183 + int verity_hash(struct dm_verity *v, struct dm_verity_io *io, 184 184 const u8 *data, size_t len, u8 *digest, bool may_sleep) 185 185 { 186 + struct ahash_request *req = verity_io_hash_req(v, io); 186 187 int r; 187 188 struct crypto_wait wait; 188 189 ··· 326 325 goto release_ret_r; 327 326 } 328 327 329 - r = verity_hash(v, verity_io_hash_req(v, io), 330 - data, 1 << v->hash_dev_block_bits, 328 + r = verity_hash(v, io, data, 1 << v->hash_dev_block_bits, 331 329 verity_io_real_digest(v, io), !io->in_bh); 332 330 if (unlikely(r < 0)) 333 331 goto release_ret_r; ··· 428 428 if (unlikely(r)) 429 429 goto free_ret; 430 430 431 - r = verity_hash(v, verity_io_hash_req(v, io), buffer, 432 - 1 << v->data_dev_block_bits, 431 + r = verity_hash(v, io, buffer, 1 << v->data_dev_block_bits, 433 432 verity_io_real_digest(v, io), true); 434 433 if (unlikely(r)) 435 434 goto free_ret; ··· 543 544 continue; 544 545 } 545 546 546 - r = verity_hash(v, verity_io_hash_req(v, io), data, block_size, 547 + r = verity_hash(v, io, data, block_size, 547 548 verity_io_real_digest(v, io), !io->in_bh); 548 549 if (unlikely(r < 0)) { 549 550 kunmap_local(data); ··· 990 991 static int verity_alloc_zero_digest(struct dm_verity *v) 991 992 { 992 993 int r = -ENOMEM; 993 - struct ahash_request *req; 994 + struct dm_verity_io *io; 994 995 u8 *zero_data; 995 996 996 997 v->zero_digest = kmalloc(v->digest_size, GFP_KERNEL); ··· 998 999 if (!v->zero_digest) 999 1000 return r; 1000 1001 1001 - req = kmalloc(v->ahash_reqsize, GFP_KERNEL); 1002 + io = kmalloc(sizeof(*io) + v->ahash_reqsize, GFP_KERNEL); 1002 1003 1003 - if (!req) 1004 + if (!io) 1004 1005 return r; /* verity_dtr will free zero_digest */ 1005 1006 1006 1007 zero_data = kzalloc(1 << v->data_dev_block_bits, GFP_KERNEL); ··· 1008 1009 if (!zero_data) 1009 1010 goto out; 1010 1011 1011 - r = verity_hash(v, req, zero_data, 1 << v->data_dev_block_bits, 1012 + r = verity_hash(v, io, zero_data, 1 << v->data_dev_block_bits, 1012 1013 v->zero_digest, true); 1013 1014 1014 1015 out: 1015 - kfree(req); 1016 + kfree(io); 1016 1017 kfree(zero_data); 1017 1018 1018 1019 return r;
+1 -1
drivers/md/dm-verity.h
··· 116 116 return io->want_digest; 117 117 } 118 118 119 - extern int verity_hash(struct dm_verity *v, struct ahash_request *req, 119 + extern int verity_hash(struct dm_verity *v, struct dm_verity_io *io, 120 120 const u8 *data, size_t len, u8 *digest, bool may_sleep); 121 121 122 122 extern int verity_hash_for_block(struct dm_verity *v, struct dm_verity_io *io,