Index: sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c =================================================================== --- sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c +++ sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c @@ -165,6 +165,7 @@ int dtrace_allow_destructive = 1; #endif dtrace_optval_t dtrace_nonroot_maxsize = (16 * 1024 * 1024); +dtrace_optval_t dtrace_buffer_maxsize = (16 * 1024 * 1024); size_t dtrace_difo_maxsize = (256 * 1024); dtrace_optval_t dtrace_dof_maxsize = (8 * 1024 * 1024); size_t dtrace_statvar_maxsize = (16 * 1024); @@ -12118,17 +12119,10 @@ #else int i; - *factor = 1; -#if defined(__aarch64__) || defined(__amd64__) || defined(__arm__) || \ - defined(__mips__) || defined(__powerpc__) || defined(__riscv__) - /* - * FreeBSD isn't good at limiting the amount of memory we - * ask to malloc, so let's place a limit here before trying - * to do something that might well end in tears at bedtime. - */ - if (size > physmem * PAGE_SIZE / (128 * (mp_maxid + 1))) + if (size > dtrace_buffer_maxsize) return (ENOMEM); -#endif + + *factor = 1; ASSERT(MUTEX_HELD(&dtrace_lock)); CPU_FOREACH(i) { Index: sys/cddl/dev/dtrace/dtrace_sysctl.c =================================================================== --- sys/cddl/dev/dtrace/dtrace_sysctl.c +++ sys/cddl/dev/dtrace/dtrace_sysctl.c @@ -93,5 +93,11 @@ SYSCTL_QUAD(_kern_dtrace, OID_AUTO, helper_actions_max, CTLFLAG_RW, &dtrace_helper_actions_max, 0, "maximum number of allowed helper actions"); +SYSCTL_QUAD(_kern_dtrace, OID_AUTO, buffer_maxsize, CTLFLAG_RW, + &dtrace_buffer_maxsize, 0, "maximum capture buffer size"); + +SYSCTL_ULONG(_kern_dtrace, OID_AUTO, strsize_default, CTLFLAG_RW, + &dtrace_strsize_default, 0, "maximum string size"); + SYSCTL_INT(_security_bsd, OID_AUTO, allow_destructive_dtrace, CTLFLAG_RDTUN, &dtrace_allow_destructive, 1, "Allow destructive mode DTrace scripts");