* [PATCH] dm: verity support data device offset
@ 2012-08-08 0:43 Wesley Miaw
2012-08-08 3:36 ` Greg KH
0 siblings, 1 reply; 2+ messages in thread
From: Wesley Miaw @ 2012-08-08 0:43 UTC (permalink / raw)
To: linux-kernel@vger.kernel.org; +Cc: Will Drewry™, msb@google.com
[-- Attachment #1: Type: text/plain, Size: 3790 bytes --]
I needed to add support for dm-verity with data that is offset into a block device. As part of this I found that the existing code did not compute the correct hash block index if the data_start might be non-zero. Here's a patch to add support for a data offset target parameter as well as a fix to the hash block index computation.
Patch and (hopefully proper) commit message below. Thanks.
--
Wesley Miaw
============================================================
Add data device start block index to dm-verity target parameters to support verity targets where the data does not begin at sector 0 of the block device. Also fix the hash block index computation so it takes into account data offsets.
---
--- a/drivers/md/dm-verity.c 2012-08-07 16:03:03.778759000 -0700
+++ b/drivers/md/dm-verity.c 2012-08-07 17:30:56.914569414 -0700
@@ -491,7 +491,7 @@
io->bio = bio;
io->orig_bi_end_io = bio->bi_end_io;
io->orig_bi_private = bio->bi_private;
- io->block = bio->bi_sector >> (v->data_dev_block_bits - SECTOR_SHIFT);
+ io->block = (bio->bi_sector - v->data_start) >> (v->data_dev_block_bits - SECTOR_SHIFT);
io->n_blocks = bio->bi_size >> v->data_dev_block_bits;
bio->bi_end_io = verity_end_io;
@@ -641,6 +641,7 @@
* <hash device>
* <data block size>
* <hash block size>
+ * <data start block>
* <the number of data blocks>
* <hash start block>
* <algorithm>
@@ -671,8 +672,8 @@
goto bad;
}
- if (argc != 10) {
- ti->error = "Invalid argument count: exactly 10 arguments required";
+ if (argc != 11) {
+ ti->error = "Invalid argument count: exactly 11 arguments required";
r = -EINVAL;
goto bad;
}
@@ -718,6 +719,15 @@
v->hash_dev_block_bits = ffs(num) - 1;
if (sscanf(argv[5], "%llu%c", &num_ll, &dummy) != 1 ||
+ num_ll << (v->data_dev_block_bits - SECTOR_SHIFT) !=
+ (sector_t)num_ll << (v->data_dev_block_bits - SECTOR_SHIFT)) {
+ ti->error = "Invalid data start";
+ r = -EINVAL;
+ goto bad;
+ }
+ v->data_start = num_ll << (v->data_dev_block_bits - SECTOR_SHIFT);
+
+ if (sscanf(argv[6], "%llu%c", &num_ll, &dummy) != 1 ||
num_ll << (v->data_dev_block_bits - SECTOR_SHIFT) !=
(sector_t)num_ll << (v->data_dev_block_bits - SECTOR_SHIFT)) {
ti->error = "Invalid data blocks";
@@ -732,7 +742,7 @@
goto bad;
}
- if (sscanf(argv[6], "%llu%c", &num_ll, &dummy) != 1 ||
+ if (sscanf(argv[7], "%llu%c", &num_ll, &dummy) != 1 ||
num_ll << (v->hash_dev_block_bits - SECTOR_SHIFT) !=
(sector_t)num_ll << (v->hash_dev_block_bits - SECTOR_SHIFT)) {
ti->error = "Invalid hash start";
@@ -741,7 +751,7 @@
}
v->hash_start = num_ll;
- v->alg_name = kstrdup(argv[7], GFP_KERNEL);
+ v->alg_name = kstrdup(argv[8], GFP_KERNEL);
if (!v->alg_name) {
ti->error = "Cannot allocate algorithm name";
r = -ENOMEM;
@@ -770,23 +780,23 @@
r = -ENOMEM;
goto bad;
}
- if (strlen(argv[8]) != v->digest_size * 2 ||
- hex2bin(v->root_digest, argv[8], v->digest_size)) {
+ if (strlen(argv[9]) != v->digest_size * 2 ||
+ hex2bin(v->root_digest, argv[9], v->digest_size)) {
ti->error = "Invalid root digest";
r = -EINVAL;
goto bad;
}
- if (strcmp(argv[9], "-")) {
- v->salt_size = strlen(argv[9]) / 2;
+ if (strcmp(argv[10], "-")) {
+ v->salt_size = strlen(argv[10]) / 2;
v->salt = kmalloc(v->salt_size, GFP_KERNEL);
if (!v->salt) {
ti->error = "Cannot allocate salt";
r = -ENOMEM;
goto bad;
}
- if (strlen(argv[9]) != v->salt_size * 2 ||
- hex2bin(v->salt, argv[9], v->salt_size)) {
+ if (strlen(argv[10]) != v->salt_size * 2 ||
+ hex2bin(v->salt, argv[10], v->salt_size)) {
ti->error = "Invalid salt";
r = -EINVAL;
goto bad;
[-- Attachment #2: Message signed with OpenPGP using GPGMail --]
[-- Type: application/pgp-signature, Size: 495 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCH] dm: verity support data device offset
2012-08-08 0:43 [PATCH] dm: verity support data device offset Wesley Miaw
@ 2012-08-08 3:36 ` Greg KH
0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2012-08-08 3:36 UTC (permalink / raw)
To: Wesley Miaw
Cc: linux-kernel@vger.kernel.org, Will Drewry™, msb@google.com
On Wed, Aug 08, 2012 at 12:43:28AM +0000, Wesley Miaw wrote:
> I needed to add support for dm-verity with data that is offset into a block device. As part of this I found that the existing code did not compute the correct hash block index if the data_start might be non-zero. Here's a patch to add support for a data offset target parameter as well as a fix to the hash block index computation.
>
> Patch and (hopefully proper) commit message below. Thanks.
> --
> Wesley Miaw
>
> ============================================================
>
> Add data device start block index to dm-verity target parameters to support verity targets where the data does not begin at sector 0 of the block device. Also fix the hash block index computation so it takes into account data offsets.
You forgot a "Signed-off-by:" line in the patch description here. Take
a look at the kernel file, Documentation/SubmittingPatches for what this
means, and how to properly format the patch so it can be applied.
Also try to send the patch to the correct people who can review, and
(hopefully) apply it. The tool, scripts/get_maintainer.pl can help you
out with that (hint, you didn't send it to anyone who could do anything
about it.)
Hope this helps,
greg k-h
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-08-08 3:36 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-08 0:43 [PATCH] dm: verity support data device offset Wesley Miaw
2012-08-08 3:36 ` Greg KH
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox