[DTrace-devel] [PATCH 52/61] Allow dt_cg_arglist() to handle the NULL case

eugene.loh at oracle.com eugene.loh at oracle.com
Fri Jul 8 14:45:36 UTC 2022


From: Eugene Loh <eugene.loh at oracle.com>

Even if args==NULL, we might want to call dt_cg_arglist() to
construct a pointer to a tuple.  So add another mechanism for
retrieving the register with that pointer and protect against
dereferencing a NULL pointer.

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 libdtrace/dt_cg.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libdtrace/dt_cg.c b/libdtrace/dt_cg.c
index 4a22c1db..5a74f5ad 100644
--- a/libdtrace/dt_cg.c
+++ b/libdtrace/dt_cg.c
@@ -2639,7 +2639,7 @@ dt_cg_push_stack(dt_irlist_t *dlp, dt_regset_t *drp, int reg)
  * Note that we leave space at the beginning of the tuple for a uint32_t value,
  * and at the end space for a uint64_t value.
  */
-static void
+static int
 dt_cg_arglist(dt_ident_t *idp, dt_node_t *args, dt_irlist_t *dlp,
 	      dt_regset_t *drp)
 {
@@ -2814,9 +2814,12 @@ dt_cg_arglist(dt_ident_t *idp, dt_node_t *args, dt_irlist_t *dlp,
 	emit(dlp, BPF_LOAD(BPF_DW, treg, treg, DCTX_MEM));
 	emit(dlp, BPF_ALU64_IMM(BPF_ADD, treg, DMEM_TUPLE(dtp)));
 
-	args->dn_reg = treg;
+	if (args != NULL)
+		args->dn_reg = treg;
 
 	TRACE_REGSET("      arglist: End  ");
+
+	return treg;
 }
 
 /*
-- 
2.18.4




More information about the DTrace-devel mailing list