svn commit: r313117 - stable/11/cddl/contrib/opensolaris/lib/libdtrace/common
Mark Johnston
markj at FreeBSD.org
Fri Feb 3 00:50:43 UTC 2017
Author: markj
Date: Fri Feb 3 00:50:41 2017
New Revision: 313117
URL: https://svnweb.freebsd.org/changeset/base/313117
Log:
MFC r310332:
Avoid modifying the object string table when patching USDT probes.
Modified:
stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c
==============================================================================
--- stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c Fri Feb 3 00:46:40 2017 (r313116)
+++ stable/11/cddl/contrib/opensolaris/lib/libdtrace/common/dt_link.c Fri Feb 3 00:50:41 2017 (r313117)
@@ -1223,6 +1223,7 @@ process_obj(dtrace_hdl_t *dtp, const cha
static const char dt_enabled[] = "enabled";
static const char dt_symprefix[] = "$dtrace";
static const char dt_symfmt[] = "%s%ld.%s";
+ char probename[DTRACE_NAMELEN];
int fd, i, ndx, eprobe, mod = 0;
Elf *elf = NULL;
GElf_Ehdr ehdr;
@@ -1576,8 +1577,6 @@ process_obj(dtrace_hdl_t *dtp, const cha
bcopy(s, pname, p - s);
pname[p - s] = '\0';
- p = strhyphenate(p + 3); /* strlen("___") */
-
if (dt_symtab_lookup(data_sym, isym, rela.r_offset,
shdr_rel.sh_info, &fsym,
(emachine1 == EM_PPC64), elf) != 0)
@@ -1628,10 +1627,14 @@ process_obj(dtrace_hdl_t *dtp, const cha
"no such provider %s", pname));
}
- if ((prp = dt_probe_lookup(pvp, p)) == NULL) {
+ if (strlcpy(probename, p + 3, sizeof (probename)) >=
+ sizeof (probename))
return (dt_link_error(dtp, elf, fd, bufs,
- "no such probe %s", p));
- }
+ "invalid probe name %s", probename));
+ (void) strhyphenate(probename);
+ if ((prp = dt_probe_lookup(pvp, probename)) == NULL)
+ return (dt_link_error(dtp, elf, fd, bufs,
+ "no such probe %s", probename));
assert(fsym.st_value <= rela.r_offset);
More information about the svn-src-stable
mailing list