Skip to content

Commit

Permalink
Fix -Wuse-after-free warning in dbuf_destroy()
Browse files Browse the repository at this point in the history
Move the use of the db pointer after it is freed.  It's only used as
a tag so a dereference would never occur, but there's no reason we
can't invert the order to resolve the warning.

    module/zfs/dbuf.c: In function 'dbuf_destroy':
    module/zfs/dbuf.c:2953:17: error:
    pointer 'db' may be used after 'free' [-Werror=use-after-free]

Reviewed-by: Ryan Moeller <[email protected]>
Reviewed-by: Alexander Motin <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #13528
Closes #13575
  • Loading branch information
behlendorf committed Jun 27, 2022
1 parent 9619bcd commit c175f5e
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions module/zfs/dbuf.c
Original file line number Diff line number Diff line change
Expand Up @@ -2941,9 +2941,6 @@ dbuf_destroy(dmu_buf_impl_t *db)
ASSERT3U(db->db_caching_status, ==, DB_NO_CACHE);
ASSERT(!multilist_link_active(&db->db_cache_link));

kmem_cache_free(dbuf_kmem_cache, db);
arc_space_return(sizeof (dmu_buf_impl_t), ARC_SPACE_DBUF);

/*
* If this dbuf is referenced from an indirect dbuf,
* decrement the ref count on the indirect dbuf.
Expand All @@ -2952,6 +2949,9 @@ dbuf_destroy(dmu_buf_impl_t *db)
mutex_enter(&parent->db_mtx);
dbuf_rele_and_unlock(parent, db, B_TRUE);
}

kmem_cache_free(dbuf_kmem_cache, db);
arc_space_return(sizeof (dmu_buf_impl_t), ARC_SPACE_DBUF);
}

/*
Expand Down

0 comments on commit c175f5e

Please sign in to comment.