Re: [PATCH V7 03/15] kprobes: Add symbols for kprobe insn pages
From: Masami Hiramatsu
Date: Wed May 27 2020 - 20:31:25 EST
On Wed, 27 May 2020 19:43:45 +0200
Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
> On Tue, May 12, 2020 at 03:19:10PM +0300, Adrian Hunter wrote:
> > @@ -2179,6 +2181,49 @@ int kprobe_add_area_blacklist(unsigned long start, unsigned long end)
> > return 0;
> > }
> >
> > +int kprobe_cache_get_kallsym(struct kprobe_insn_cache *c, unsigned int *symnum,
> > + unsigned long *value, char *type, char *sym)
> > +{
> > + struct kprobe_insn_page *kip;
> > + int ret = -ERANGE;
> > +
> > + rcu_read_lock();
> > + list_for_each_entry_rcu(kip, &c->pages, list) {
> > + if ((*symnum)--)
> > + continue;
> > + strlcpy(sym, c->sym, KSYM_NAME_LEN);
> > + *type = 't';
> > + *value = (unsigned long)kip->insns;
> > + ret = 0;
> > + break;
> > + }
> > + rcu_read_unlock();
> > +
> > + return ret;
> > +}
>
> This fails on sparc64-defconfig.
>
> In file included from ../include/linux/kprobes.h:19:0,
> from ../kernel/kprobes.c:21:
> ../kernel/kprobes.c: In function 'kprobe_cache_get_kallsym':
> ../include/linux/rculist.h:382:49: error: dereferencing pointer to incomplete type 'struct kprobe_insn_page'
>
> Please provide a new patch.
Ah, yes. Since some archs doesn't require special out-of-line
trampoline, we need to check __ARCH_WANT_KPROBES_INSN_SLOT,
and if not, kprobe_cache_get_kallsym() has do nothing and
return -ERANGE.
Thank you,
--
Masami Hiramatsu <mhiramat@xxxxxxxxxx>