Skip to content

Commit 83be3dc

Browse files
committed
dtrace: Add a sysctl to block loading of dtrace.ko in CHERI kernels
The DTrace port is experimental and not suitable for use in production environments. Add some friction to make sure that users understand this.
1 parent d895b94 commit 83be3dc

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

sys/cddl/dev/dtrace/dtrace_modevent.c

+12
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,18 @@ dtrace_modevent(module_t mod __unused, int type, void *data __unused)
2828

2929
switch (type) {
3030
case MOD_LOAD:
31+
if (!dtrace_enabled) {
32+
printf(
33+
"DTrace is experimental on this platform and is disabled by default.\n");
34+
printf(
35+
"Set the debug.dtrace_enabled sysctl to 1 to allow dtrace.ko to load.\n");
36+
printf(
37+
"Be prepared for bugs and kernel panics if you use DTrace.\n");
38+
printf(
39+
"Please report bugs at https://github.com/CTSRD-CHERI/cheribsd");
40+
return (ENOTSUP);
41+
}
42+
3143
break;
3244

3345
case MOD_UNLOAD:

sys/kern/kern_dtrace.c

+8
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ FEATURE(kdtrace_hooks,
4848

4949
static MALLOC_DEFINE(M_KDTRACE, "kdtrace", "DTrace hooks");
5050

51+
#if __has_feature(capabilities)
52+
int dtrace_enabled = 0;
53+
#else
54+
int dtrace_enabled = 1;
55+
#endif
56+
SYSCTL_INT(_debug, OID_AUTO, dtrace_enabled, CTLFLAG_RWTUN, &dtrace_enabled, 0,
57+
"DTrace enabled");
58+
5159
/* Hooks used in the machine-dependent trap handlers. */
5260
dtrace_trap_func_t dtrace_trap_func;
5361
dtrace_doubletrap_func_t dtrace_doubletrap_func;

sys/sys/dtrace_bsd.h

+2
Original file line numberDiff line numberDiff line change
@@ -175,4 +175,6 @@ void kdtrace_thread_dtor(struct thread *td);
175175
uint64_t dtrace_gethrtime(void);
176176
uint64_t dtrace_gethrestime(void);
177177

178+
extern int dtrace_enabled;
179+
178180
#endif /* _SYS_DTRACE_BSD_H */

0 commit comments

Comments
 (0)