From: Masami Hiramatsu mhiramat@kernel.org
mainline inclusion from mainline-v5.12-rc1 commit 33b1d14668859626bf96958e38042b0ed8a22a68 category: bugfix bugzilla: 31369 CVE: NA
-----------------------------------------------
Warn if the kprobe is reregistered, since there must be a software bug (actively used resource must not be re-registered) and caller must be fixed.
Link: https://lkml.kernel.org/r/161236436734.194052.4058506306336814476.stgit@devn...
Acked-by: Naveen N. Rao naveen.n.rao@linux.vnet.ibm.com Acked-by: Ananth N Mavinakayanahalli ananth@linux.ibm.com Signed-off-by: Masami Hiramatsu mhiramat@kernel.org Signed-off-by: Steven Rostedt (VMware) rostedt@goodmis.org Signed-off-by: Wang ShaoBo bobo.shaobowang@huawei.com Reviewed-by: Cheng Jian cj.chengjian@huawei.com Signed-off-by: Yang Yingliang yangyingliang@huawei.com --- kernel/kprobes.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 91985ae1fe0b3..9d11df2ce8838 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c @@ -1523,13 +1523,16 @@ static struct kprobe *__get_valid_kprobe(struct kprobe *p) return ap; }
-/* Return error if the kprobe is being re-registered */ -static inline int check_kprobe_rereg(struct kprobe *p) +/* + * Warn and return error if the kprobe is being re-registered since + * there must be a software bug. + */ +static inline int warn_kprobe_rereg(struct kprobe *p) { int ret = 0;
mutex_lock(&kprobe_mutex); - if (__get_valid_kprobe(p)) + if (WARN_ON_ONCE(__get_valid_kprobe(p))) ret = -EINVAL; mutex_unlock(&kprobe_mutex);
@@ -1617,7 +1620,7 @@ int register_kprobe(struct kprobe *p) return PTR_ERR(addr); p->addr = addr;
- ret = check_kprobe_rereg(p); + ret = warn_kprobe_rereg(p); if (ret) return ret;
@@ -1965,7 +1968,7 @@ int register_kretprobe(struct kretprobe *rp) return ret;
/* If only rp->kp.addr is specified, check reregistering kprobes */ - if (rp->kp.addr && check_kprobe_rereg(&rp->kp)) + if (rp->kp.addr && warn_kprobe_rereg(&rp->kp)) return -EINVAL;
if (kretprobe_blacklist_size) {