[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