]> granicus.if.org Git - zfs/commitdiff
dmu_tx: Fix possible NULL pointer dereference
authorNathaniel Clark <Nathaniel.Clark@misrule.us>
Tue, 23 Jul 2013 17:32:57 +0000 (13:32 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 1 Aug 2013 16:48:07 +0000 (09:48 -0700)
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 <Nathaniel.Clark@misrule.us>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #1610

module/zfs/dmu_tx.c

index b0dc64f0603bbecc3ce381b4240b444842794f01..fd714135a853329edb9297485a60afb8539cf312 100644 (file)
@@ -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;