mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
kprobes: support kretprobe blacklist
Introduce architecture dependent kretprobe blacklists to prohibit users from inserting return probes on the function in which kprobes can be inserted but kretprobes can not. This patch also removes "__kprobes" mark from "__switch_to" on x86_64 and registers "__switch_to" to the blacklist on x86-64, because that mark is to prohibit user from inserting only kretprobe. Signed-off-by: Masami Hiramatsu <[email protected]> Cc: Prasanna S Panchamukhi <[email protected]> Acked-by: Ananth N Mavinakayanahalli <[email protected]> Cc: Anil S Keshavamurthy <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
49dce689ad
commit
f438d914b2
17 changed files with 64 additions and 1 deletions
|
|
@ -716,6 +716,18 @@ int __kprobes register_kretprobe(struct kretprobe *rp)
|
|||
int ret = 0;
|
||||
struct kretprobe_instance *inst;
|
||||
int i;
|
||||
void *addr = rp->kp.addr;
|
||||
|
||||
if (kretprobe_blacklist_size) {
|
||||
if (addr == NULL)
|
||||
kprobe_lookup_name(rp->kp.symbol_name, addr);
|
||||
addr += rp->kp.offset;
|
||||
|
||||
for (i = 0; kretprobe_blacklist[i].name != NULL; i++) {
|
||||
if (kretprobe_blacklist[i].addr == addr)
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
rp->kp.pre_handler = pre_handler_kretprobe;
|
||||
rp->kp.post_handler = NULL;
|
||||
|
|
@ -794,6 +806,17 @@ static int __init init_kprobes(void)
|
|||
INIT_HLIST_HEAD(&kretprobe_inst_table[i]);
|
||||
}
|
||||
|
||||
if (kretprobe_blacklist_size) {
|
||||
/* lookup the function address from its name */
|
||||
for (i = 0; kretprobe_blacklist[i].name != NULL; i++) {
|
||||
kprobe_lookup_name(kretprobe_blacklist[i].name,
|
||||
kretprobe_blacklist[i].addr);
|
||||
if (!kretprobe_blacklist[i].addr)
|
||||
printk("kretprobe: lookup failed: %s\n",
|
||||
kretprobe_blacklist[i].name);
|
||||
}
|
||||
}
|
||||
|
||||
/* By default, kprobes are enabled */
|
||||
kprobe_enabled = true;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue