From: Karel Zak Date: Tue, 22 Sep 2015 09:14:31 +0000 (+0200) Subject: libblkid: (promise raid) cleanup code X-Git-Tag: v2.28-rc1~339 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6b86ef4a6a9ca614ac1fdc31712d6b20263d226c;p=thirdparty%2Futil-linux.git libblkid: (promise raid) cleanup code Signed-off-by: Karel Zak --- diff --git a/libblkid/src/superblocks/promise_raid.c b/libblkid/src/superblocks/promise_raid.c index 678460a43b..75f3a20f10 100644 --- a/libblkid/src/superblocks/promise_raid.c +++ b/libblkid/src/superblocks/promise_raid.c @@ -27,21 +27,27 @@ struct promise_metadata { static int probe_pdcraid(blkid_probe pr, const struct blkid_idmag *mag __attribute__((__unused__))) { - unsigned int i; + size_t i; static unsigned int sectors[] = { - 63, 255, 256, 16, 399, 591, 675, 735, 911, 974, 991, 951, 3087, 0 + 63, 255, 256, 16, 399, 591, 675, 735, 911, 974, 991, 951, 3087 }; + uint64_t nsectors; if (pr->size < 0x40000) return 1; if (!S_ISREG(pr->mode) && !blkid_probe_is_wholedisk(pr)) return 1; - for (i = 0; sectors[i] != 0; i++) { + nsectors = pr->size >> 9; + + for (i = 0; i < ARRAY_SIZE(sectors); i++) { uint64_t off; struct promise_metadata *pdc; - off = ((pr->size / 0x200) - sectors[i]) * 0x200; + if (nsectors < sectors[i]) + return 1; + + off = (nsectors - sectors[i]) << 9; pdc = (struct promise_metadata *) blkid_probe_get_buffer(pr, off,