From: Pali Rohár Date: Sun, 8 Nov 2020 00:51:28 +0000 (+0100) Subject: libblkid: fix blkid_probe_get_sb() to use hint offset calculation X-Git-Tag: v2.37-rc1~266^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b5c5b42014619358371addfd7864dc9401647745;p=thirdparty%2Futil-linux.git libblkid: fix blkid_probe_get_sb() to use hint offset calculation --- diff --git a/libblkid/src/blkidP.h b/libblkid/src/blkidP.h index df335f1b1b..a3fe6748a9 100644 --- a/libblkid/src/blkidP.h +++ b/libblkid/src/blkidP.h @@ -428,9 +428,9 @@ extern int blkid_probe_get_idmag(blkid_probe pr, const struct blkid_idinfo *id, __attribute__((nonnull(1))); /* returns superblock according to 'struct blkid_idmag' */ +extern unsigned char *_blkid_probe_get_sb(blkid_probe pr, const struct blkid_idmag *mag, size_t size); #define blkid_probe_get_sb(_pr, _mag, type) \ - ((type *) blkid_probe_get_buffer((_pr),\ - (_mag)->kboff << 10, sizeof(type))) + ((type *) _blkid_probe_get_sb((_pr), _mag, sizeof(type))) extern blkid_partlist blkid_probe_get_partlist(blkid_probe pr) __attribute__((nonnull)) diff --git a/libblkid/src/probe.c b/libblkid/src/probe.c index 7c29b7fdcf..35977edef4 100644 --- a/libblkid/src/probe.c +++ b/libblkid/src/probe.c @@ -1035,6 +1035,16 @@ int blkid_probe_set_dimension(blkid_probe pr, uint64_t off, uint64_t size) return 0; } +unsigned char *_blkid_probe_get_sb(blkid_probe pr, const struct blkid_idmag *mag, size_t size) +{ + uint64_t hint_offset; + + if (!mag->hoff || blkid_probe_get_hint(pr, mag->hoff, &hint_offset) < 0) + hint_offset = 0; + + return blkid_probe_get_buffer(pr, hint_offset + (mag->kboff << 10), size); +} + /* * Check for matching magic value. * Returns BLKID_PROBE_OK if found, BLKID_PROBE_NONE if not found