Fix integer overflow in get_next_chunk()
dn->dn_datablksz type is uint32_t and need to be casted to uint64_t to avoid an overflow when the record size is greater than 4 MiB. Reviewed-by: Tom Caputi <tcaputi@datto.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Olivier Mazouffre <olivier.mazouffre@ims-bordeaux.fr> Closes #8778 Closes #8797
This commit is contained in:
parent
aaf3b30dcf
commit
580256045b
|
@ -719,8 +719,8 @@ get_next_chunk(dnode_t *dn, uint64_t *start, uint64_t minimum, uint64_t *l1blks)
|
||||||
uint64_t blks;
|
uint64_t blks;
|
||||||
uint64_t maxblks = DMU_MAX_ACCESS >> (dn->dn_indblkshift + 1);
|
uint64_t maxblks = DMU_MAX_ACCESS >> (dn->dn_indblkshift + 1);
|
||||||
/* bytes of data covered by a level-1 indirect block */
|
/* bytes of data covered by a level-1 indirect block */
|
||||||
uint64_t iblkrange =
|
uint64_t iblkrange = (uint64_t)dn->dn_datablksz *
|
||||||
dn->dn_datablksz * EPB(dn->dn_indblkshift, SPA_BLKPTRSHIFT);
|
EPB(dn->dn_indblkshift, SPA_BLKPTRSHIFT);
|
||||||
|
|
||||||
ASSERT3U(minimum, <=, *start);
|
ASSERT3U(minimum, <=, *start);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue