From: Nathaniel Clark Date: Tue, 23 Jul 2013 17:32:57 +0000 (-0400) Subject: dmu_tx: Fix possible NULL pointer dereference X-Git-Tag: zfs-0.6.2~25 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7d63721118a82a29649a3d8ae4b4522afdad1449;p=zfs dmu_tx: Fix possible NULL pointer dereference dmu_tx_hold_object_impl can return NULL on error. Check for this condition prior to dereferencing pointer. This can only occur if the passed object was invalid or unallocated. Signed-off-by: Nathaniel Clark Signed-off-by: Brian Behlendorf Closes #1610 --- diff --git a/module/zfs/dmu_tx.c b/module/zfs/dmu_tx.c index b0dc64f06..fd714135a 100644 --- a/module/zfs/dmu_tx.c +++ b/module/zfs/dmu_tx.c @@ -773,12 +773,13 @@ void dmu_tx_hold_space(dmu_tx_t *tx, uint64_t space) { dmu_tx_hold_t *txh; + ASSERT(tx->tx_txg == 0); txh = dmu_tx_hold_object_impl(tx, tx->tx_objset, DMU_NEW_OBJECT, THT_SPACE, space, 0); - - txh->txh_space_towrite += space; + if (txh) + txh->txh_space_towrite += space; } int @@ -1320,6 +1321,8 @@ dmu_tx_hold_spill(dmu_tx_t *tx, uint64_t object) txh = dmu_tx_hold_object_impl(tx, tx->tx_objset, object, THT_SPILL, 0, 0); + if (txh == NULL) + return; dn = txh->txh_dnode;