Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6a019a92 authored by Masami Hiramatsu's avatar Masami Hiramatsu Committed by Catalin Marinas
Browse files

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: default avatarWill Deacon <will.deacon@arm.com>
Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
[catalin.marinas@arm.com: Add arch_populate_kprobe_blacklist() comment]
Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent 6e08af0f
Loading
Loading
Loading
Loading
+30 −19
Original line number Original line Diff line number Diff line
@@ -471,26 +471,37 @@ kprobe_breakpoint_handler(struct pt_regs *regs, unsigned int esr)
	return DBG_HOOK_HANDLED;
	return DBG_HOOK_HANDLED;
}
}


bool arch_within_kprobe_blacklist(unsigned long addr)
/*
 * Provide a blacklist of symbols identifying ranges which cannot be kprobed.
 * This blacklist is exposed to userspace via debugfs (kprobes/blacklist).
 */
int __init arch_populate_kprobe_blacklist(void)
{
{
	if ((addr >= (unsigned long)__kprobes_text_start &&
	int ret;
	    addr < (unsigned long)__kprobes_text_end) ||

	    (addr >= (unsigned long)__entry_text_start &&
	ret = kprobe_add_area_blacklist((unsigned long)__entry_text_start,
	    addr < (unsigned long)__entry_text_end) ||
					(unsigned long)__entry_text_end);
	    (addr >= (unsigned long)__idmap_text_start &&
	if (ret)
	    addr < (unsigned long)__idmap_text_end) ||
		return ret;
	    (addr >= (unsigned long)__hyp_text_start &&
	ret = kprobe_add_area_blacklist((unsigned long)__irqentry_text_start,
	    addr < (unsigned long)__hyp_text_end) ||
					(unsigned long)__irqentry_text_end);
	    in_exception_text(addr))
	if (ret)
		return true;
		return ret;

	ret = kprobe_add_area_blacklist((unsigned long)__exception_text_start,
	if (!is_kernel_in_hyp_mode()) {
					(unsigned long)__exception_text_end);
		if ((addr >= (unsigned long)__hyp_idmap_text_start &&
	if (ret)
		    addr < (unsigned long)__hyp_idmap_text_end))
		return ret;
			return true;
	ret = kprobe_add_area_blacklist((unsigned long)__idmap_text_start,
	}
					(unsigned long)__idmap_text_end);

	if (ret)
	return false;
		return ret;
	ret = kprobe_add_area_blacklist((unsigned long)__hyp_text_start,
					(unsigned long)__hyp_text_end);
	if (ret || is_kernel_in_hyp_mode())
		return ret;
	ret = kprobe_add_area_blacklist((unsigned long)__hyp_idmap_text_start,
					(unsigned long)__hyp_idmap_text_end);
	return ret;
}
}


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