1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-17 10:26:15 +00:00

Allow DOF sections with excessively long probe function components.

Without this change, DTrace will refuse to load a DOF section if the
function component of any of its probes exceeds DTRACE_FUNCNAMELEN (128).
Probes in C++ programs can have very long function components. Rather than
rejecting all probes if a single probe exceeds the limit, simply skip the
invalid probe and emit a warning. This ensures that valid probes are
instantiated.

PR:		207735
MFC after:	2 weeks
This commit is contained in:
Mark Johnston 2016-04-25 18:40:57 +00:00
parent cd8bbc382d
commit 328d8adb9b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=298589

View File

@ -9355,6 +9355,10 @@ dtrace_helper_provide_one(dof_helper_t *dhp, dof_sec_t *sec, pid_t pid)
probe = (dof_probe_t *)(uintptr_t)(daddr +
prb_sec->dofs_offset + i * prb_sec->dofs_entsize);
/* See the check in dtrace_helper_provider_validate(). */
if (strlen(strtab + probe->dofpr_func) >= DTRACE_FUNCNAMELEN)
continue;
dhpb.dthpb_mod = dhp->dofhp_mod;
dhpb.dthpb_func = strtab + probe->dofpr_func;
dhpb.dthpb_name = strtab + probe->dofpr_name;
@ -16042,7 +16046,13 @@ dtrace_helper_provider_validate(dof_hdr_t *dof, dof_sec_t *sec)
if (strlen(strtab + probe->dofpr_func) >= DTRACE_FUNCNAMELEN) {
dtrace_dof_error(dof, "function name too long");
return (-1);
/*
* Keep going if the function name is too long.
* Unlike provider and probe names, we cannot reasonably
* impose restrictions on function names, since they're
* a property of the code being instrumented. We will
* skip this probe in dtrace_helper_provide_one().
*/
}
if (probe->dofpr_name >= str_sec->dofs_size ||