[dm-devel] [PATCH] dm-verity: fix overflow checking

Mikulas Patocka mpatocka at redhat.com
Wed Aug 8 21:06:10 UTC 2012


BTW. This patch improves dm-verity overflow checking.

Mikulas

---

dm-verity: fix overflow checking

Overflow checking in dm-verity was not sufficient.
It would check overflow if sector_t was smaller than long long but not
if sector_t and long long have the same size. This patch implements
proper overflow checking.

Signed-off-by: Mikulas Patocka <mpatocka at redhat.com>

---
 drivers/md/dm-verity.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Index: linux-3.5-fast/drivers/md/dm-verity.c
===================================================================
--- linux-3.5-fast.orig/drivers/md/dm-verity.c	2012-08-08 21:24:00.000000000 +0200
+++ linux-3.5-fast/drivers/md/dm-verity.c	2012-08-08 21:28:06.000000000 +0200
@@ -718,8 +718,8 @@ static int verity_ctr(struct dm_target *
 	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)) {
+	    (sector_t)(num_ll << (v->data_dev_block_bits - SECTOR_SHIFT))
+	    >> (v->data_dev_block_bits - SECTOR_SHIFT) != nul_ll) {
 		ti->error = "Invalid data blocks";
 		r = -EINVAL;
 		goto bad;
@@ -733,8 +733,8 @@ static int verity_ctr(struct dm_target *
 	}
 
 	if (sscanf(argv[6], "%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)) {
+	    (sector_t)(num_ll << (v->hash_dev_block_bits - SECTOR_SHIFT))
+	    >> (v->hash_dev_block_bits - SECTOR_SHIFT) != num_ll) {
 		ti->error = "Invalid hash start";
 		r = -EINVAL;
 		goto bad;




More information about the dm-devel mailing list