Author: markj
Date: Mon Apr 25 18:40:57 2016
New Revision: 298589
URL: https://svnweb.freebsd.org/changeset/base/298589

Log:
  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

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c        Mon Apr 
25 18:13:21 2016        (r298588)
+++ head/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c        Mon Apr 
25 18:40:57 2016        (r298589)
@@ -9355,6 +9355,10 @@ dtrace_helper_provide_one(dof_helper_t *
                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_
 
                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 ||
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to