On Tue Mar 26, 2024 at 1:50 AM EET, Masami Hiramatsu (Google) wrote: > On Tue, 26 Mar 2024 00:09:42 +0200 > "Jarkko Sakkinen" <jarkko@xxxxxxxxxx> wrote: > > > On Mon Mar 25, 2024 at 11:55 PM EET, Jarkko Sakkinen wrote: > > > +#ifdef CONFIG_MODULES > > > if (register_module_notifier(&trace_kprobe_module_nb)) > > > return -EINVAL; > > > +#endif /* CONFIG_MODULES */ > > > > register_module_notifier() does have "dummy" version but what > > would I pass to it. It makes more mess than it cleans to declare > > also a "dummy" version of trace_kprobe_module_nb. > > That is better than having #ifdef in the function. > > > > > The callback itself has too tight module subsystem bindings so > > that they could be simply flagged with IS_DEFINED() (or correct > > if I'm mistaken, this the conclusion I've ended up with). > > Please try this. > > ----- > diff --git a/kernel/kprobes.c b/kernel/kprobes.c > index 70dc6179086e..bc98db14927f 100644 > --- a/kernel/kprobes.c > +++ b/kernel/kprobes.c > @@ -2625,6 +2625,7 @@ static void remove_module_kprobe_blacklist(struct module *mod) > } > } > > +#ifdef CONFIG_MODULES > /* Module notifier call back, checking kprobes on the module */ > static int kprobes_module_callback(struct notifier_block *nb, > unsigned long val, void *data) > @@ -2675,6 +2676,9 @@ static int kprobes_module_callback(struct notifier_block *nb, > mutex_unlock(&kprobe_mutex); > return NOTIFY_DONE; > } > +#else > +#define kprobes_module_callback (NULL) > +#endif > > static struct notifier_block kprobe_module_nb = { > .notifier_call = kprobes_module_callback, > @@ -2739,7 +2743,7 @@ static int __init init_kprobes(void) > err = arch_init_kprobes(); > if (!err) > err = register_die_notifier(&kprobe_exceptions_nb); > - if (!err) > + if (!err && IS_ENABLED(CONFIG_MODULES)) > err = register_module_notifier(&kprobe_module_nb); > > kprobes_initialized = (err == 0); OK, thanks for the suggestion WFM. I'll give this also a spin with VisionFive2 RISC-V SBC before sending v6. BR, Jarkko