lib/alloc_tag: do not register sysctl interface when CONFIG_SYSCTL=n
authorSuren Baghdasaryan <surenb@google.com>
Sat, 1 Jun 2024 23:38:31 +0000 (16:38 -0700)
committerAndrew Morton <akpm@linux-foundation.org>
Sat, 15 Jun 2024 17:43:05 +0000 (10:43 -0700)
Memory allocation profiling is trying to register sysctl interface even
when CONFIG_SYSCTL=n, resulting in proc_do_static_key() being undefined.
Prevent that by skipping sysctl registration for such configurations.

Link: https://lkml.kernel.org/r/20240601233831.617124-1-surenb@google.com
Fixes: 22d407b164ff ("lib: add allocation tagging support for memory allocation profiling")
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202405280616.wcOGWJEj-lkp@intel.com/
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Cc: Kent Overstreet <kent.overstreet@linux.dev>
Cc: Kees Cook <keescook@chromium.org>
Cc: Pasha Tatashin <pasha.tatashin@soleen.com>
Cc: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
lib/alloc_tag.c

index 11ed973ac359dfa57eb14a6f5b8196ad8ffe102b..c347b8b72d78dc4a3ff44cf54c7e5f5c43eabdc9 100644 (file)
@@ -227,6 +227,7 @@ struct page_ext_operations page_alloc_tagging_ops = {
 };
 EXPORT_SYMBOL(page_alloc_tagging_ops);
 
+#ifdef CONFIG_SYSCTL
 static struct ctl_table memory_allocation_profiling_sysctls[] = {
        {
                .procname       = "mem_profiling",
@@ -241,6 +242,17 @@ static struct ctl_table memory_allocation_profiling_sysctls[] = {
        { }
 };
 
+static void __init sysctl_init(void)
+{
+       if (!mem_profiling_support)
+               memory_allocation_profiling_sysctls[0].mode = 0444;
+
+       register_sysctl_init("vm", memory_allocation_profiling_sysctls);
+}
+#else /* CONFIG_SYSCTL */
+static inline void sysctl_init(void) {}
+#endif /* CONFIG_SYSCTL */
+
 static int __init alloc_tag_init(void)
 {
        const struct codetag_type_desc desc = {
@@ -253,9 +265,7 @@ static int __init alloc_tag_init(void)
        if (IS_ERR(alloc_tag_cttype))
                return PTR_ERR(alloc_tag_cttype);
 
-       if (!mem_profiling_support)
-               memory_allocation_profiling_sysctls[0].mode = 0444;
-       register_sysctl_init("vm", memory_allocation_profiling_sysctls);
+       sysctl_init();
        procfs_init();
 
        return 0;