Fix invalid pointer access in trace_dbuf.h
In dnode_destroy, dn_objset is invalidated. However, it will later call into dbuf_destroy, in which DTRACE_SET_STATE will try to access spa_name via dn_objset causing illegal pointer access. Reviewed-by: Brian Atkinson <batkinson@lanl.gov> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Chunwei Chen <david.chen@nutanix.com> Closes #15333
This commit is contained in:
parent
fe4d055b36
commit
249d759caf
|
@ -60,8 +60,12 @@
|
||||||
|
|
||||||
#define DBUF_TP_FAST_ASSIGN \
|
#define DBUF_TP_FAST_ASSIGN \
|
||||||
if (db != NULL) { \
|
if (db != NULL) { \
|
||||||
__assign_str(os_spa, \
|
if (POINTER_IS_VALID(DB_DNODE(db)->dn_objset)) { \
|
||||||
spa_name(DB_DNODE(db)->dn_objset->os_spa)); \
|
__assign_str(os_spa, \
|
||||||
|
spa_name(DB_DNODE(db)->dn_objset->os_spa)); \
|
||||||
|
} else { \
|
||||||
|
__assign_str(os_spa, "NULL"); \
|
||||||
|
} \
|
||||||
\
|
\
|
||||||
__entry->ds_object = db->db_objset->os_dsl_dataset ? \
|
__entry->ds_object = db->db_objset->os_dsl_dataset ? \
|
||||||
db->db_objset->os_dsl_dataset->ds_object : 0; \
|
db->db_objset->os_dsl_dataset->ds_object : 0; \
|
||||||
|
|
Loading…
Reference in New Issue