X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/39236c6e673c41db228275375ab7fdb0f837b292..813fb2f63a553c957e917ede5f119b021d6ce391:/bsd/dev/i386/fbt_x86.c diff --git a/bsd/dev/i386/fbt_x86.c b/bsd/dev/i386/fbt_x86.c index 750a024cf..54f00f290 100644 --- a/bsd/dev/i386/fbt_x86.c +++ b/bsd/dev/i386/fbt_x86.c @@ -174,8 +174,11 @@ static const char * probe_ctx_closure[] = "Debugger", "IS_64BIT_PROCESS", "OSCompareAndSwap", + "_disable_preemption", + "_enable_preemption", "absolutetime_to_microtime", "act_set_astbsd", + "ast_dtrace_on", "ast_pending", "clock_get_calendar_nanotime_nowait", "copyin", @@ -235,16 +238,16 @@ static int _cmp(const void *a, const void *b) } static const void * bsearch( - register const void *key, + const void *key, const void *base0, size_t nmemb, - register size_t size, - register int (*compar)(const void *, const void *)) { + size_t size, + int (*compar)(const void *, const void *)) { - register const char *base = base0; - register size_t lim; - register int cmp; - register const void *p; + const char *base = base0; + size_t lim; + int cmp; + const void *p; for (lim = nmemb; lim != 0; lim >>= 1) { p = base + (lim >> 1) * size; @@ -469,9 +472,6 @@ is_symbol_valid(const char* name) */ if (LIT_STRNSTART(name, "kdp_") || LIT_STRNSTART(name, "kdb_") || - LIT_STRNSTART(name, "kdbg_") || - LIT_STRNSTART(name, "kdebug_") || - LIT_STRNSTART(name, "kernel_debug") || LIT_STRNSTART(name, "debug_") || LIT_STRNEQL(name, "Debugger") || LIT_STRNEQL(name, "Call_DebuggerC") || @@ -650,6 +650,14 @@ __provide_probe_64(struct modctl *ctl, uintptr_t instrLow, uintptr_t instrHigh, machine_inst_t *instr, *limit, theInstr, i1, i2, i3; int size; + /* + * Guard against null symbols + */ + if (!symbolStart || !instrLow || !instrHigh) { + kprintf("dtrace: %s has an invalid address\n", symbolName); + return; + } + for (j = 0, instr = symbolStart, theInstr = 0; (j < 4) && ((uintptr_t)instr >= instrLow) && (instrHigh > (uintptr_t)(instr + 2)); j++) { @@ -1046,6 +1054,8 @@ fbt_provide_module(void *arg, struct modctl *ctl) if (MOD_HAS_USERSPACE_SYMBOLS(ctl)) { __user_syms_provide_module(arg, ctl); ctl->mod_flags |= MODCTL_FBT_PROBES_PROVIDED; + if (MOD_FBT_PROVIDE_PRIVATE_PROBES(ctl)) + ctl->mod_flags |= MODCTL_FBT_PRIVATE_PROBES_PROVIDED; return; } }