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:
parent
cd8bbc382d
commit
328d8adb9b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=298589
@ -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 ||
|
||||
|
Loading…
Reference in New Issue
Block a user