| From 6e752f541b0045193ac210df1363ed4df0286029 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 11 Sep 2018 19:21:09 +0900 |
| Subject: kprobes: Don't call BUG_ON() if there is a kprobe in use on free list |
| |
| From: Masami Hiramatsu <mhiramat@kernel.org> |
| |
| [ Upstream commit cbdd96f5586151e48317d90a403941ec23f12660 ] |
| |
| Instead of calling BUG_ON(), if we find a kprobe in use on free kprobe |
| list, just remove it from the list and keep it on kprobe hash list |
| as same as other in-use kprobes. |
| |
| Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> |
| Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com> |
| Cc: David S . Miller <davem@davemloft.net> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Naveen N . Rao <naveen.n.rao@linux.vnet.ibm.com> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Link: http://lkml.kernel.org/r/153666126882.21306.10738207224288507996.stgit@devbox |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| kernel/kprobes.c | 8 +++++++- |
| 1 file changed, 7 insertions(+), 1 deletion(-) |
| |
| diff --git a/kernel/kprobes.c b/kernel/kprobes.c |
| index b8efca9dc2cbb..aed90788db5c1 100644 |
| --- a/kernel/kprobes.c |
| +++ b/kernel/kprobes.c |
| @@ -544,8 +544,14 @@ static void do_free_cleaned_kprobes(void) |
| struct optimized_kprobe *op, *tmp; |
| |
| list_for_each_entry_safe(op, tmp, &freeing_list, list) { |
| - BUG_ON(!kprobe_unused(&op->kp)); |
| list_del_init(&op->list); |
| + if (WARN_ON_ONCE(!kprobe_unused(&op->kp))) { |
| + /* |
| + * This must not happen, but if there is a kprobe |
| + * still in use, keep it on kprobes hash list. |
| + */ |
| + continue; |
| + } |
| free_aggr_kprobe(&op->kp); |
| } |
| } |
| -- |
| 2.20.1 |
| |