[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