aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/kprobes.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kprobes.c')
-rw-r--r--kernel/kprobes.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/kernel/kprobes.c b/kernel/kprobes.c
index f4ddfdd2d07e..c83e54727131 100644
--- a/kernel/kprobes.c
+++ b/kernel/kprobes.c
@@ -1396,7 +1396,7 @@ bool __weak arch_within_kprobe_blacklist(unsigned long addr)
1396 addr < (unsigned long)__kprobes_text_end; 1396 addr < (unsigned long)__kprobes_text_end;
1397} 1397}
1398 1398
1399bool within_kprobe_blacklist(unsigned long addr) 1399static bool __within_kprobe_blacklist(unsigned long addr)
1400{ 1400{
1401 struct kprobe_blacklist_entry *ent; 1401 struct kprobe_blacklist_entry *ent;
1402 1402
@@ -1410,7 +1410,26 @@ bool within_kprobe_blacklist(unsigned long addr)
1410 if (addr >= ent->start_addr && addr < ent->end_addr) 1410 if (addr >= ent->start_addr && addr < ent->end_addr)
1411 return true; 1411 return true;
1412 } 1412 }
1413 return false;
1414}
1413 1415
1416bool within_kprobe_blacklist(unsigned long addr)
1417{
1418 char symname[KSYM_NAME_LEN], *p;
1419
1420 if (__within_kprobe_blacklist(addr))
1421 return true;
1422
1423 /* Check if the address is on a suffixed-symbol */
1424 if (!lookup_symbol_name(addr, symname)) {
1425 p = strchr(symname, '.');
1426 if (!p)
1427 return false;
1428 *p = '\0';
1429 addr = (unsigned long)kprobe_lookup_name(symname, 0);
1430 if (addr)
1431 return __within_kprobe_blacklist(addr);
1432 }
1414 return false; 1433 return false;
1415} 1434}
1416 1435