[DTrace-devel] [PATCH 05/14] probe: get the size of the hash-lookup key right
Kris Van Hees
kris.van.hees at oracle.com
Fri Oct 25 02:40:22 UTC 2024
On Thu, Oct 24, 2024 at 12:37:49PM +0100, Nick Alcock wrote:
> This was allocated with alloca() but then snprintf()ed with a size of
> INT_MAX. This makes _FORTIFY_SOURCE rightly unhappy.
>
> Passing in the size we actually allocated is trivial.
Except for the fact that dt_probe_keylen() and dt_probe_key() are only
ever used from dt_probe_lookup2(). So, getting rid of those two functions
and rewriting the call as shown below seems to be a much better fix.
> Signed-off-by: Nick Alcock <nick.alcock at oracle.com>
> Bug: https://github.com/oracle/dtrace-utils/issues/78
> ---
> libdtrace/dt_probe.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/libdtrace/dt_probe.c b/libdtrace/dt_probe.c
> index 686e2a661253..bb1773ee60d4 100644
> --- a/libdtrace/dt_probe.c
> +++ b/libdtrace/dt_probe.c
> @@ -180,9 +180,9 @@ dt_probe_keylen(const dtrace_probedesc_t *pdp)
> }
>
> static char *
> -dt_probe_key(const dtrace_probedesc_t *pdp, char *s)
> +dt_probe_key(const dtrace_probedesc_t *pdp, char *s, size_t len)
> {
> - snprintf(s, INT_MAX, "%s:%s:%s", pdp->mod, pdp->fun, pdp->prb);
> + snprintf(s, len, "%s:%s:%s", pdp->mod, pdp->fun, pdp->prb);
> return s;
> }
>
> @@ -204,7 +204,7 @@ dt_probe_lookup2(dt_provider_t *pvp, const char *s)
> return NULL; /* dt_errno is set for us */
>
> keylen = dt_probe_keylen(&pd);
> - key = dt_probe_key(&pd, alloca(keylen));
> + key = dt_probe_key(&pd, alloca(keylen), keylen);
Better would be:
if (asprintf(&key, "%s:%s:%s", pdp->mod, pdp->fun, pdp->prb) == -1) {
dt_set_errno(dtp, errno);
return NULL;
}
>
> /*
> * If the probe is already declared, then return the dt_probe_t from
> --
> 2.46.0.278.g36e3a12567
>
More information about the DTrace-devel
mailing list