[DTrace-devel] [PATCH] cg: fix tstring leak in translator members that yield string values
Kris Van Hees
kris.van.hees at oracle.com
Sat Aug 5 02:13:16 UTC 2023
When a translator member yields a string value, the tstring holding the
value was not properly tracked. This resulted in an assertion failure
in test/demo/ip/ipproto.d.
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
libdtrace/dt_cg.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index 7f946b2c..8275cc85 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -1135,7 +1135,6 @@ dt_cg_tstring_xalloc(dt_pcb_t *pcb)
assert(i < DT_TSTRING_SLOTS);
ts->in_use = 1;
-
return ts->offset;
}
@@ -6444,6 +6443,11 @@ dt_cg_node(dt_node_t *dnp, dt_irlist_t *dlp, dt_regset_t *drp)
dt_cg_node(mnp->dn_membexpr, dlp, drp);
dnp->dn_reg = mnp->dn_membexpr->dn_reg;
+
+ /* Move tstring (if any) to dnp. */
+ dnp->dn_tstring = mnp->dn_membexpr->dn_tstring;
+ mnp->dn_membexpr->dn_tstring = NULL;
+
dt_cg_typecast(mnp->dn_membexpr, dnp, dlp, drp);
dxp->dx_ident->di_flags &= ~DT_IDFLG_CGREG;
--
2.40.1
More information about the DTrace-devel
mailing list