kprobes: Add new KPROBE_FLAG_ON_FUNC_ENTRY kprobe flag

Bugzilla: https://bugzilla.redhat.com/2166911

commit bf7a87f1075f67c286f794519f0fedfa8b0b18cc
Author: Jiri Olsa <jolsa@kernel.org>
Date:   Mon Sep 26 17:33:35 2022 +0200

    kprobes: Add new KPROBE_FLAG_ON_FUNC_ENTRY kprobe flag
    
    Adding KPROBE_FLAG_ON_FUNC_ENTRY kprobe flag to indicate that
    attach address is on function entry. This is used in following
    changes in get_func_ip helper to return correct function address.
    
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    Link: https://lore.kernel.org/r/20220926153340.1621984-2-jolsa@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Artem Savkov <asavkov@redhat.com>
This commit is contained in:
Artem Savkov 2023-02-03 14:49:40 +01:00 committed by Felix Maurer
parent 9a9a473691
commit fbe85326ce
2 changed files with 6 additions and 1 deletions

View File

@ -103,6 +103,7 @@ struct kprobe {
* this flag is only for optimized_kprobe.
*/
#define KPROBE_FLAG_FTRACE 8 /* probe is using ftrace */
#define KPROBE_FLAG_ON_FUNC_ENTRY 16 /* probe is on the function entry */
/* Has this kprobe gone ? */
static inline bool kprobe_gone(struct kprobe *p)

View File

@ -1657,9 +1657,10 @@ int register_kprobe(struct kprobe *p)
struct kprobe *old_p;
struct module *probed_mod;
kprobe_opcode_t *addr;
bool on_func_entry;
/* Adjust probe address from symbol */
addr = kprobe_addr(p);
addr = _kprobe_addr(p->addr, p->symbol_name, p->offset, &on_func_entry);
if (IS_ERR(addr))
return PTR_ERR(addr);
p->addr = addr;
@ -1679,6 +1680,9 @@ int register_kprobe(struct kprobe *p)
mutex_lock(&kprobe_mutex);
if (on_func_entry)
p->flags |= KPROBE_FLAG_ON_FUNC_ENTRY;
old_p = get_kprobe(p->addr);
if (old_p) {
/* Since this may unoptimize 'old_p', locking 'text_mutex'. */