]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Suppress static analyzer warning in dbuf_hold_copy()
authorRichard Yao <richard.yao@alumni.stonybrook.edu>
Tue, 7 Feb 2023 09:51:56 +0000 (04:51 -0500)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 1 Mar 2023 01:31:50 +0000 (17:31 -0800)
Clang's static analyzer claims that dbuf_hold_copy() will have a NULL
pointer dereference in data->b_data when called by dbuf_hold_impl().
This is impossible because data is dr->dt.dl.dr_data, which is non-NULL
whenever db->db_level == 0, which is always the case whenever
dbuf_hold_impl() calls dbuf_hold_copy(). We add an assertion to suppress
the complaint.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Brian Atkinson <batkinson@lanl.gov>
Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Closes #14470

module/zfs/dbuf.c

index efaa13317be022b7d3e532ab68e162fa7f4ae909..160557fce9cbfaf78dead95cc7206dd2e11757f3 100644 (file)
@@ -3632,8 +3632,10 @@ dbuf_hold_impl(dnode_t *dn, uint8_t level, uint64_t blkid,
            dn->dn_object != DMU_META_DNODE_OBJECT &&
            db->db_state == DB_CACHED && db->db_data_pending) {
                dbuf_dirty_record_t *dr = db->db_data_pending;
-               if (dr->dt.dl.dr_data == db->db_buf)
+               if (dr->dt.dl.dr_data == db->db_buf) {
+                       ASSERT3P(db->db_buf, !=, NULL);
                        dbuf_hold_copy(dn, db);
+               }
        }
 
        if (multilist_link_active(&db->db_cache_link)) {