mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-29 18:24:11 +03:00
ZIL: Assert record sizes in different places
This should make sure we have log written without overflows. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Alexander Motin <mav@FreeBSD.org> Sponsored by: iXsystems, Inc. Closes #15517
This commit is contained in:
committed by
Brian Behlendorf
parent
2e259c6f00
commit
ad47eca195
@@ -363,11 +363,14 @@ zio_checksum_compute(zio_t *zio, enum zio_checksum checksum,
|
||||
zil_chain_t zilc;
|
||||
abd_copy_to_buf(&zilc, abd, sizeof (zil_chain_t));
|
||||
|
||||
size = P2ROUNDUP_TYPED(zilc.zc_nused, ZIL_MIN_BLKSZ,
|
||||
uint64_t);
|
||||
uint64_t nused = P2ROUNDUP_TYPED(zilc.zc_nused,
|
||||
ZIL_MIN_BLKSZ, uint64_t);
|
||||
ASSERT3U(size, >=, nused);
|
||||
size = nused;
|
||||
eck = zilc.zc_eck;
|
||||
eck_offset = offsetof(zil_chain_t, zc_eck);
|
||||
} else {
|
||||
ASSERT3U(size, >=, sizeof (zio_eck_t));
|
||||
eck_offset = size - sizeof (zio_eck_t);
|
||||
abd_copy_to_buf_off(&eck, abd, eck_offset,
|
||||
sizeof (zio_eck_t));
|
||||
@@ -448,12 +451,13 @@ zio_checksum_error_impl(spa_t *spa, const blkptr_t *bp,
|
||||
return (SET_ERROR(ECKSUM));
|
||||
}
|
||||
|
||||
if (nused > size) {
|
||||
nused = P2ROUNDUP_TYPED(nused, ZIL_MIN_BLKSZ, uint64_t);
|
||||
if (size < nused)
|
||||
return (SET_ERROR(ECKSUM));
|
||||
}
|
||||
|
||||
size = P2ROUNDUP_TYPED(nused, ZIL_MIN_BLKSZ, uint64_t);
|
||||
size = nused;
|
||||
} else {
|
||||
if (size < sizeof (zio_eck_t))
|
||||
return (SET_ERROR(ECKSUM));
|
||||
eck_offset = size - sizeof (zio_eck_t);
|
||||
abd_copy_to_buf_off(&eck, abd, eck_offset,
|
||||
sizeof (zio_eck_t));
|
||||
|
||||
Reference in New Issue
Block a user