mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-23 12:31:13 +01:00
f0188618f2
- Wrong integer type was specified. - Wrong or missing "access" specifier. The "access" specifier sometimes included the SYSCTL type, which it should not, except for procedural SYSCTL nodes. - Logical OR where binary OR was expected. - Properly assert the "access" argument passed to all SYSCTL macros, using the CTASSERT macro. This applies to both static- and dynamically created SYSCTLs. - Properly assert the the data type for both static and dynamic SYSCTLs. In the case of static SYSCTLs we only assert that the data pointed to by the SYSCTL data pointer has the correct size, hence there is no easy way to assert types in the C language outside a C-function. - Rewrote some code which doesn't pass a constant "access" specifier when creating dynamic SYSCTL nodes, which is now a requirement. - Updated "EXAMPLES" section in SYSCTL manual page. MFC after: 3 days Sponsored by: Mellanox Technologies
94 lines
2.7 KiB
C
94 lines
2.7 KiB
C
/*
|
|
* CDDL HEADER START
|
|
*
|
|
* The contents of this file are subject to the terms of the
|
|
* Common Development and Distribution License (the "License").
|
|
* You may not use this file except in compliance with the License.
|
|
*
|
|
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
|
* or http://www.opensolaris.org/os/licensing.
|
|
* See the License for the specific language governing permissions
|
|
* and limitations under the License.
|
|
*
|
|
* When distributing Covered Code, include this CDDL HEADER in each
|
|
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
|
* If applicable, add the following below this CDDL HEADER, with the
|
|
* fields enclosed by brackets "[]" replaced with your own identifying
|
|
* information: Portions Copyright [yyyy] [name of copyright owner]
|
|
*
|
|
* CDDL HEADER END
|
|
*
|
|
* $FreeBSD$
|
|
*
|
|
*/
|
|
|
|
SYSCTL_NODE(_debug, OID_AUTO, dtrace, CTLFLAG_RD, 0, "DTrace debug parameters");
|
|
|
|
int dtrace_debug = 0;
|
|
SYSCTL_INT(_debug_dtrace, OID_AUTO, debug, CTLFLAG_RWTUN, &dtrace_debug, 0, "");
|
|
|
|
/* Report registered DTrace providers. */
|
|
static int
|
|
sysctl_dtrace_providers(SYSCTL_HANDLER_ARGS)
|
|
{
|
|
char *p_name = NULL;
|
|
dtrace_provider_t
|
|
*prov = dtrace_provider;
|
|
int error = 0;
|
|
size_t len = 0;
|
|
|
|
mutex_enter(&dtrace_provider_lock);
|
|
mutex_enter(&dtrace_lock);
|
|
|
|
/* Compute the length of the space-separated provider name string. */
|
|
while (prov != NULL) {
|
|
len += strlen(prov->dtpv_name) + 1;
|
|
prov = prov->dtpv_next;
|
|
}
|
|
|
|
if ((p_name = kmem_alloc(len, KM_SLEEP)) == NULL)
|
|
error = ENOMEM;
|
|
else {
|
|
/* Start with an empty string. */
|
|
*p_name = '\0';
|
|
|
|
/* Point to the first provider again. */
|
|
prov = dtrace_provider;
|
|
|
|
/* Loop through the providers, appending the names. */
|
|
while (prov != NULL) {
|
|
if (prov != dtrace_provider)
|
|
(void) strlcat(p_name, " ", len);
|
|
|
|
(void) strlcat(p_name, prov->dtpv_name, len);
|
|
|
|
prov = prov->dtpv_next;
|
|
}
|
|
}
|
|
|
|
mutex_exit(&dtrace_lock);
|
|
mutex_exit(&dtrace_provider_lock);
|
|
|
|
if (p_name != NULL) {
|
|
error = sysctl_handle_string(oidp, p_name, len, req);
|
|
|
|
kmem_free(p_name, 0);
|
|
}
|
|
|
|
return (error);
|
|
}
|
|
|
|
SYSCTL_PROC(_debug_dtrace, OID_AUTO, providers, CTLTYPE_STRING | CTLFLAG_RD,
|
|
0, 0, sysctl_dtrace_providers, "A", "available DTrace providers");
|
|
|
|
SYSCTL_NODE(_kern, OID_AUTO, dtrace, CTLFLAG_RD, 0, "DTrace parameters");
|
|
|
|
SYSCTL_INT(_kern_dtrace, OID_AUTO, memstr_max, CTLFLAG_RW, &dtrace_memstr_max,
|
|
0, "largest allowed argument to memstr(), 0 indicates no limit");
|
|
|
|
SYSCTL_QUAD(_kern_dtrace, OID_AUTO, dof_maxsize, CTLFLAG_RW,
|
|
&dtrace_dof_maxsize, 0, "largest allowed DOF table");
|
|
|
|
SYSCTL_QUAD(_kern_dtrace, OID_AUTO, helper_actions_max, CTLFLAG_RW,
|
|
&dtrace_helper_actions_max, 0, "maximum number of allowed helper actions");
|