+ lck_mtx_lock(ktrace_lock);
+
+ // Most sysctls require an access check, but a few are public.
+ switch( (uintptr_t) arg1 ) {
+ case REQ_CLASSES:
+ case REQ_CONFIG_COUNT:
+ case REQ_COUNTER_COUNT:
+ // These read-only sysctls are public.
+ break;
+
+ default:
+ // Require kperf access to read or write anything else.
+ // This is either root or the blessed pid.
+ if ((ret = ktrace_read_check())) {
+ lck_mtx_unlock(ktrace_lock);
+ return ret;
+ }
+ break;
+ }
+
+ lck_mtx_unlock(ktrace_lock);
+