Skip to content

Commit

Permalink
Zero pad bytes when allocating a ZIL record
Browse files Browse the repository at this point in the history
When allocating a record, we round up the allocation size to a multiple
of 8.  In this case, any padding bytes should be zeroed, otherwise the
contents of uninitialized memory are written to the ZIL.

This was found using KMSAN.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by: Mark Johnston <markj@FreeBSD.org>
Closes #12383
  • Loading branch information
markjdb authored and aerusso committed Jul 28, 2021
1 parent 82d9667 commit 68732af
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions module/zfs/zil.c
Original file line number Diff line number Diff line change
Expand Up @@ -1783,18 +1783,19 @@ zil_lwb_commit(zilog_t *zilog, itx_t *itx, lwb_t *lwb)
}

itx_t *
zil_itx_create(uint64_t txtype, size_t lrsize)
zil_itx_create(uint64_t txtype, size_t olrsize)
{
size_t itxsize;
size_t itxsize, lrsize;
itx_t *itx;

lrsize = P2ROUNDUP_TYPED(lrsize, sizeof (uint64_t), size_t);
lrsize = P2ROUNDUP_TYPED(olrsize, sizeof (uint64_t), size_t);
itxsize = offsetof(itx_t, itx_lr) + lrsize;

itx = zio_data_buf_alloc(itxsize);
itx->itx_lr.lrc_txtype = txtype;
itx->itx_lr.lrc_reclen = lrsize;
itx->itx_lr.lrc_seq = 0; /* defensive */
bzero((char *)&itx->itx_lr + olrsize, lrsize - olrsize);
itx->itx_sync = B_TRUE; /* default is synchronous */
itx->itx_callback = NULL;
itx->itx_callback_data = NULL;
Expand Down

0 comments on commit 68732af

Please sign in to comment.