X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/ca66cea69e6e866fd781ae2260d9474bdd48f2ca..935ed37a5c468c8a1c07408573c08b8b7ef80e8b:/bsd/dev/dtrace/dtrace.c diff --git a/bsd/dev/dtrace/dtrace.c b/bsd/dev/dtrace/dtrace.c index aa200c11f..c28ae6f0b 100644 --- a/bsd/dev/dtrace/dtrace.c +++ b/bsd/dev/dtrace/dtrace.c @@ -1071,6 +1071,21 @@ bad: return (0); } +#if defined(__APPLE__) +/* dtrace_priv_proc() omitting the P_LNOATTACH check. For PID and EXECNAME accesses. */ +static int +dtrace_priv_proc_relaxed(dtrace_state_t *state) +{ + + if (state->dts_cred.dcr_action & DTRACE_CRA_PROC) + return (1); + + cpu_core[CPU->cpu_id].cpuc_dtrace_flags |= CPU_DTRACE_UPRIV; + + return (0); +} +#endif /* __APPLE__ */ + static int dtrace_priv_kernel(dtrace_state_t *state) { @@ -2709,7 +2724,7 @@ dtrace_dif_variable(dtrace_mstate_t *mstate, dtrace_state_t *state, uint64_t v, #else case DIF_VAR_PID: - if (!dtrace_priv_proc(state)) + if (!dtrace_priv_proc_relaxed(state)) return (0); /* @@ -2738,7 +2753,7 @@ dtrace_dif_variable(dtrace_mstate_t *mstate, dtrace_state_t *state, uint64_t v, return ((uint64_t)curthread->t_procp->p_ppid); #else case DIF_VAR_PPID: - if (!dtrace_priv_proc(state)) + if (!dtrace_priv_proc_relaxed(state)) return (0); /* @@ -2800,7 +2815,7 @@ dtrace_dif_variable(dtrace_mstate_t *mstate, dtrace_state_t *state, uint64_t v, mstate->dtms_scratch_base + mstate->dtms_scratch_size) return 0; - if (!dtrace_priv_proc(state)) + if (!dtrace_priv_proc_relaxed(state)) return (0); mstate->dtms_scratch_ptr += scratch_size;