diff options
| author | Toomas Soome <tsoome@me.com> | 2020-01-04 20:05:30 +0200 |
|---|---|---|
| committer | Toomas Soome <tsoome@me.com> | 2020-01-13 19:52:08 +0200 |
| commit | b63b86d12b5ac4c5450c67c1222a35f224f5d0e4 (patch) | |
| tree | 429fc064c1116efdbef75ccc930bde0df9c28d0c /usr/src/lib/libdtrace/common | |
| parent | 2c687d6826d5cbe1435931df7165d210c3336019 (diff) | |
| download | illumos-joyent-b63b86d12b5ac4c5450c67c1222a35f224f5d0e4.tar.gz | |
12158 libdtrace: argument to 'alloca' may be too large
Reviewed by: Matthias Scheler <mscheler@tintri.com>
Approved by: Dan McDonald <danmcd@joyent.com>
Diffstat (limited to 'usr/src/lib/libdtrace/common')
| -rw-r--r-- | usr/src/lib/libdtrace/common/dt_options.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/usr/src/lib/libdtrace/common/dt_options.c b/usr/src/lib/libdtrace/common/dt_options.c index 201b50a177..66366c65b4 100644 --- a/usr/src/lib/libdtrace/common/dt_options.c +++ b/usr/src/lib/libdtrace/common/dt_options.c @@ -698,7 +698,7 @@ dt_opt_rate(dtrace_hdl_t *dtp, const char *arg, uintptr_t option) char *name; hrtime_t mul; } suffix[] = { - { "ns", NANOSEC / NANOSEC }, + { "ns", NANOSEC / NANOSEC }, { "nsec", NANOSEC / NANOSEC }, { "us", NANOSEC / MICROSEC }, { "usec", NANOSEC / MICROSEC }, @@ -875,15 +875,19 @@ dt_options_load(dtrace_hdl_t *dtp) if (hdr.dofh_loadsz < sizeof (dof_hdr_t)) return (dt_set_errno(dtp, EINVAL)); - dof = alloca(hdr.dofh_loadsz); - bzero(dof, sizeof (dof_hdr_t)); + dof = calloc(1, hdr.dofh_loadsz); + if (dof == NULL) + return (dt_set_errno(dtp, errno)); + dof->dofh_loadsz = hdr.dofh_loadsz; for (i = 0; i < DTRACEOPT_MAX; i++) dtp->dt_options[i] = DTRACEOPT_UNSET; - if (dt_ioctl(dtp, DTRACEIOC_DOFGET, dof) == -1) + if (dt_ioctl(dtp, DTRACEIOC_DOFGET, dof) == -1) { + free(dof); return (dt_set_errno(dtp, errno)); + } for (i = 0; i < dof->dofh_secnum; i++) { sec = (dof_sec_t *)(uintptr_t)((uintptr_t)dof + @@ -908,6 +912,7 @@ dt_options_load(dtrace_hdl_t *dtp) dtp->dt_options[opt->dofo_option] = opt->dofo_value; } + free(dof); return (0); } |
