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); ----- Thank you, -- Masami Hiramatsu (Google) <mhiramat@xxxxxxxxxx>