[DTrace-devel] [PATCH v2 03/04] rawtp: report lockmem issues when determining rawtp argument count
Kris Van Hees
kris.van.hees at oracle.com
Thu Nov 30 18:12:35 UTC 2023
On Thu, Nov 30, 2023 at 10:59:06AM -0500, Kris Van Hees via DTrace-devel wrote:
> No test is added for this condition because any such test would have to
> be removed again in the next patch, where a better way to retrieve rawtp
> argument info will be introduced. This code will remain as a fallback,
> but we do not have any way to programmatically force it to be used.
>
> Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
> libdtrace/dt_bpf.c | 2 +-
> libdtrace/dt_bpf.h | 2 ++
> libdtrace/dt_cc.c | 3 +++
> libdtrace/dt_prov_rawtp.c | 4 +++-
> 4 files changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/libdtrace/dt_bpf.c b/libdtrace/dt_bpf.c
> index 8034af48..730f8d8e 100644
> --- a/libdtrace/dt_bpf.c
> +++ b/libdtrace/dt_bpf.c
> @@ -62,7 +62,7 @@ dt_bpf_error(dtrace_hdl_t *dtp, const char *fmt, ...)
> return dt_set_errno(dtp, EDT_BPF);
> }
>
> -static int
> +int
> dt_bpf_lockmem_error(dtrace_hdl_t *dtp, const char *msg)
> {
> return dt_bpf_error(dtp, "%s:\n"
> diff --git a/libdtrace/dt_bpf.h b/libdtrace/dt_bpf.h
> index 125a250d..9a8e9492 100644
> --- a/libdtrace/dt_bpf.h
> +++ b/libdtrace/dt_bpf.h
> @@ -50,6 +50,8 @@ extern int perf_event_open(struct perf_event_attr *attr, pid_t pid, int cpu,
> extern int bpf(enum bpf_cmd cmd, union bpf_attr *attr);
>
> extern int dt_bpf_gmap_create(struct dtrace_hdl *);
> +extern int dt_bpf_lockmem_error(struct dtrace_hdl *dtp, const char *msg);
> +
> extern int dt_bpf_map_lookup(int fd, const void *key, void *val);
> extern int dt_bpf_map_next_key(int fd, const void *key, void *nxt);
> extern int dt_bpf_map_update(int fd, const void *key, const void *val);
> diff --git a/libdtrace/dt_cc.c b/libdtrace/dt_cc.c
> index a42109f1..887e0be1 100644
> --- a/libdtrace/dt_cc.c
> +++ b/libdtrace/dt_cc.c
> @@ -307,6 +307,9 @@ dt_setcontext(dtrace_hdl_t *dtp, const dtrace_probedesc_t *pdp)
> pdp->prb);
> }
>
> + if (err == EDT_BPF)
> + (yypcb->pcb_jmpbuf, err);
Err, this is supposed to be:
lomgjmp(yypcb->pcb_jmpbuf, err);
> +
> if (err != EDT_NOPROBE && err != EDT_UNSTABLE && err != 0)
> xyerror(D_PDESC_INVAL, "%s\n", dtrace_errmsg(dtp, err));
>
> diff --git a/libdtrace/dt_prov_rawtp.c b/libdtrace/dt_prov_rawtp.c
> index 24104dd5..93a30bb7 100644
> --- a/libdtrace/dt_prov_rawtp.c
> +++ b/libdtrace/dt_prov_rawtp.c
> @@ -181,7 +181,9 @@ static int probe_info(dtrace_hdl_t *dtp, const dt_probe_t *prp,
> dif.dtdo_len = 2;
>
> bpf_fd = dt_bpf_prog_load(dt_rawtp.prog_type, &dif, 0, NULL, 0);
> - if (bpf_fd < 0)
> + if (bpf_fd == -EPERM)
> + return dt_bpf_lockmem_error(dtp, "Cannot retrieve argument count");
> + else if (bpf_fd < 0)
> continue;
> rtp_fd = dt_bpf_raw_tracepoint_open(prp->desc->prb, bpf_fd);
> close(bpf_fd);
> --
> 2.42.0
>
>
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel
More information about the DTrace-devel
mailing list