diff options
| author | Toomas Soome <tsoome@me.com> | 2019-10-24 11:44:33 +0300 |
|---|---|---|
| committer | Toomas Soome <tsoome@me.com> | 2019-10-29 20:27:42 +0200 |
| commit | ece0bc848de931052064be9faf07f4e44c150a15 (patch) | |
| tree | 04f84b1a30a8308607129d8b3fae1c2ac884afe7 | |
| parent | 1a2641f606f3bfa50cdbbe8770af78116de52563 (diff) | |
| download | illumos-joyent-ece0bc848de931052064be9faf07f4e44c150a15.tar.gz | |
11883 loader: zio_checksum_verify should check byteswap
Reviewed by: Andy Fiddaman <andy@omniosce.org>
Reviewed by: Andy Stormont <AStormont@racktopsystems.com>
Reviewed by: Kody Kantor <kody.kantor@joyent.com>
Approved by: Robert Mustacchi <rm@fingolfin.org>
| -rw-r--r-- | usr/src/boot/sys/cddl/boot/zfs/zfsimpl.h | 7 | ||||
| -rw-r--r-- | usr/src/boot/sys/cddl/boot/zfs/zfssubr.c | 3 |
2 files changed, 9 insertions, 1 deletions
diff --git a/usr/src/boot/sys/cddl/boot/zfs/zfsimpl.h b/usr/src/boot/sys/cddl/boot/zfs/zfsimpl.h index 5997260616..459324b88a 100644 --- a/usr/src/boot/sys/cddl/boot/zfs/zfsimpl.h +++ b/usr/src/boot/sys/cddl/boot/zfs/zfsimpl.h @@ -444,6 +444,13 @@ _NOTE(CONSTCOND) } while (0) ZIO_SET_CHECKSUM(&(bp)->blk_cksum, 0, 0, 0, 0); \ } +#if BYTE_ORDER == _BIG_ENDIAN +#define ZFS_HOST_BYTEORDER (0ULL) +#else +#define ZFS_HOST_BYTEORDER (1ULL) +#endif + +#define BP_SHOULD_BYTESWAP(bp) (BP_GET_BYTEORDER(bp) != ZFS_HOST_BYTEORDER) #define BPE_NUM_WORDS 14 #define BPE_PAYLOAD_SIZE (BPE_NUM_WORDS * sizeof (uint64_t)) #define BPE_IS_PAYLOADWORD(bp, wp) \ diff --git a/usr/src/boot/sys/cddl/boot/zfs/zfssubr.c b/usr/src/boot/sys/cddl/boot/zfs/zfssubr.c index 3a81418c6a..4cfd337213 100644 --- a/usr/src/boot/sys/cddl/boot/zfs/zfssubr.c +++ b/usr/src/boot/sys/cddl/boot/zfs/zfssubr.c @@ -320,8 +320,9 @@ zio_checksum_verify(const spa_t *spa, const blkptr_t *bp, void *data) byteswap_uint64_array(&expected_cksum, sizeof (zio_cksum_t)); } else { + byteswap = BP_SHOULD_BYTESWAP(bp); expected_cksum = bp->blk_cksum; - ci->ci_func[0](data, size, ctx, &actual_cksum); + ci->ci_func[byteswap](data, size, ctx, &actual_cksum); } if (!ZIO_CHECKSUM_EQUAL(actual_cksum, expected_cksum)) { |
