[DTrace-devel] [PATCH 17/20] speculations, bpf: check for nonexistent CTF before using it
Nick Alcock
nick.alcock at oracle.com
Wed May 11 21:12:59 UTC 2022
This turns coredumps into a not-all-that-much-more-helpful "no such file
or directory" error (but turning DT_DEBUG on at least tells you which
file is missing, i.e. some ctfa file)
Signed-off-by: Nick Alcock <nick.alcock at oracle.com>
---
libdtrace/dt_cc.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/libdtrace/dt_cc.c b/libdtrace/dt_cc.c
index c6c31fc92712..9a61134057a0 100644
--- a/libdtrace/dt_cc.c
+++ b/libdtrace/dt_cc.c
@@ -2378,10 +2378,14 @@ dt_link_construct(dtrace_hdl_t *dtp, const dt_probe_t *prp, dtrace_difo_t *dp,
case DT_CONST_TASK_REAL_PARENT:
case DT_CONST_TASK_COMM: {
ctf_file_t *cfp = dtp->dt_shared_ctf;
- ctf_id_t type = ctf_lookup_by_name(cfp, "struct task_struct");
+ ctf_id_t type;
ctf_membinfo_t ctm;
int rc = 0;
+ if (!cfp)
+ return dt_set_errno(dtp, EDT_NOCTF);
+
+ type = ctf_lookup_by_name(cfp, "struct task_struct");
if (type == CTF_ERR)
goto err_ctf;
@@ -2406,10 +2410,14 @@ dt_link_construct(dtrace_hdl_t *dtp, const dt_probe_t *prp, dtrace_difo_t *dp,
}
case DT_CONST_MUTEX_OWNER: {
ctf_file_t *cfp = dtp->dt_shared_ctf;
- ctf_id_t type = ctf_lookup_by_name(cfp, "struct mutex");
+ ctf_id_t type;
ctf_membinfo_t ctm;
ctf_id_t rc = CTF_ERR;
+ if (!cfp)
+ return dt_set_errno(dtp, EDT_NOCTF);
+
+ type = ctf_lookup_by_name(cfp, "struct mutex");
if (type == CTF_ERR)
goto err_ctf;
@@ -2436,6 +2444,9 @@ dt_link_construct(dtrace_hdl_t *dtp, const dt_probe_t *prp, dtrace_difo_t *dp,
ctf_id_t rc = CTF_ERR;
uint64_t total_offset;
+ if (!cfp)
+ return dt_set_errno(dtp, EDT_NOCTF);
+
type = ctf_lookup_by_name(cfp, "rwlock_t");
if (type == CTF_ERR)
goto err_ctf;
--
2.36.1.263.g194b774378.dirty
More information about the DTrace-devel
mailing list