Skip to content

Commit 6a019a9

Browse files
mhiramatctmarinas
authored andcommitted
arm64: kprobes: Use arch_populate_kprobe_blacklist()
Use arch_populate_kprobe_blacklist() instead of arch_within_kprobe_blacklist() so that we can see the full blacklisted symbols under the debugfs. Acked-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> [catalin.marinas@arm.com: Add arch_populate_kprobe_blacklist() comment] Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
1 parent 6e08af0 commit 6a019a9

File tree

1 file changed

+30
-19
lines changed

1 file changed

+30
-19
lines changed

arch/arm64/kernel/probes/kprobes.c

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -471,26 +471,37 @@ kprobe_breakpoint_handler(struct pt_regs *regs, unsigned int esr)
471471
return DBG_HOOK_HANDLED;
472472
}
473473

474-
bool arch_within_kprobe_blacklist(unsigned long addr)
474+
/*
475+
* Provide a blacklist of symbols identifying ranges which cannot be kprobed.
476+
* This blacklist is exposed to userspace via debugfs (kprobes/blacklist).
477+
*/
478+
int __init arch_populate_kprobe_blacklist(void)
475479
{
476-
if ((addr >= (unsigned long)__kprobes_text_start &&
477-
addr < (unsigned long)__kprobes_text_end) ||
478-
(addr >= (unsigned long)__entry_text_start &&
479-
addr < (unsigned long)__entry_text_end) ||
480-
(addr >= (unsigned long)__idmap_text_start &&
481-
addr < (unsigned long)__idmap_text_end) ||
482-
(addr >= (unsigned long)__hyp_text_start &&
483-
addr < (unsigned long)__hyp_text_end) ||
484-
in_exception_text(addr))
485-
return true;
486-
487-
if (!is_kernel_in_hyp_mode()) {
488-
if ((addr >= (unsigned long)__hyp_idmap_text_start &&
489-
addr < (unsigned long)__hyp_idmap_text_end))
490-
return true;
491-
}
492-
493-
return false;
480+
int ret;
481+
482+
ret = kprobe_add_area_blacklist((unsigned long)__entry_text_start,
483+
(unsigned long)__entry_text_end);
484+
if (ret)
485+
return ret;
486+
ret = kprobe_add_area_blacklist((unsigned long)__irqentry_text_start,
487+
(unsigned long)__irqentry_text_end);
488+
if (ret)
489+
return ret;
490+
ret = kprobe_add_area_blacklist((unsigned long)__exception_text_start,
491+
(unsigned long)__exception_text_end);
492+
if (ret)
493+
return ret;
494+
ret = kprobe_add_area_blacklist((unsigned long)__idmap_text_start,
495+
(unsigned long)__idmap_text_end);
496+
if (ret)
497+
return ret;
498+
ret = kprobe_add_area_blacklist((unsigned long)__hyp_text_start,
499+
(unsigned long)__hyp_text_end);
500+
if (ret || is_kernel_in_hyp_mode())
501+
return ret;
502+
ret = kprobe_add_area_blacklist((unsigned long)__hyp_idmap_text_start,
503+
(unsigned long)__hyp_idmap_text_end);
504+
return ret;
494505
}
495506

496507
void __kprobes __used *trampoline_probe_handler(struct pt_regs *regs)

0 commit comments

Comments
 (0)