Merge remote-tracking branch 'stable/linux-5.15.y' into rpi-5.15.y
[platform/kernel/linux-rpi.git] / init / main.c
index 3f72169..cf79b5a 100644 (file)
 #include <linux/kcsan.h>
 #include <linux/init_syscalls.h>
 #include <linux/stackdepot.h>
+#include <net/net_namespace.h>
 
 #include <asm/io.h>
 #include <asm/bugs.h>
@@ -382,6 +383,7 @@ static char * __init xbc_make_cmdline(const char *key)
        ret = xbc_snprint_cmdline(new_cmdline, len + 1, root);
        if (ret < 0 || ret > len) {
                pr_err("Failed to print extra kernel cmdline.\n");
+               memblock_free_ptr(new_cmdline, len + 1);
                return NULL;
        }
 
@@ -923,7 +925,9 @@ static void __init print_unknown_bootoptions(void)
        for (p = &envp_init[2]; *p; p++)
                end += sprintf(end, " %s", *p);
 
-       pr_notice("Unknown command line parameters:%s\n", unknown_options);
+       /* Start at unknown_options[1] to skip the initial space */
+       pr_notice("Unknown kernel command line parameters \"%s\", will be passed to user space.\n",
+               &unknown_options[1]);
        memblock_free_ptr(unknown_options, len);
 }
 
@@ -1037,21 +1041,18 @@ asmlinkage __visible void __init __no_sanitize_address start_kernel(void)
        softirq_init();
        timekeeping_init();
        kfence_init();
+       time_init();
 
        /*
         * For best initial stack canary entropy, prepare it after:
         * - setup_arch() for any UEFI RNG entropy and boot cmdline access
-        * - timekeeping_init() for ktime entropy used in rand_initialize()
-        * - rand_initialize() to get any arch-specific entropy like RDRAND
-        * - add_latent_entropy() to get any latent entropy
-        * - adding command line entropy
+        * - timekeeping_init() for ktime entropy used in random_init()
+        * - time_init() for making random_get_entropy() work on some platforms
+        * - random_init() to initialize the RNG from from early entropy sources
         */
-       rand_initialize();
-       add_latent_entropy();
-       add_device_randomness(command_line, strlen(command_line));
+       random_init(command_line);
        boot_init_stack_canary();
 
-       time_init();
        perf_event_init();
        profile_init();
        call_function_init();
@@ -1119,6 +1120,7 @@ asmlinkage __visible void __init __no_sanitize_address start_kernel(void)
        key_init();
        security_init();
        dbg_late_init();
+       net_ns_init();
        vfs_caches_init();
        pagecache_init();
        signals_init();
@@ -1193,7 +1195,7 @@ static int __init initcall_blacklist(char *str)
                }
        } while (str_entry);
 
-       return 0;
+       return 1;
 }
 
 static bool __init_or_module initcall_blacklisted(initcall_t fn)
@@ -1242,7 +1244,7 @@ trace_initcall_start_cb(void *data, initcall_t fn)
 {
        ktime_t *calltime = (ktime_t *)data;
 
-       printk(KERN_DEBUG "calling  %pS @ %i irqs_disabled() %d\n", fn, task_pid_nr(current), irqs_disabled());
+       printk(KERN_DEBUG "calling  %pS @ %i\n", fn, task_pid_nr(current));
        *calltime = ktime_get();
 }
 
@@ -1256,8 +1258,8 @@ trace_initcall_finish_cb(void *data, initcall_t fn, int ret)
        rettime = ktime_get();
        delta = ktime_sub(rettime, *calltime);
        duration = (unsigned long long) ktime_to_ns(delta) >> 10;
-       printk(KERN_DEBUG "initcall %pS returned %d after %lld usecs, irqs_disabled() %d\n",
-                fn, ret, duration, irqs_disabled());
+       printk(KERN_DEBUG "initcall %pS returned %d after %lld usecs\n",
+                fn, ret, duration);
 }
 
 static ktime_t initcall_calltime;
@@ -1455,7 +1457,9 @@ static noinline void __init kernel_init_freeable(void);
 bool rodata_enabled __ro_after_init = true;
 static int __init set_debug_rodata(char *str)
 {
-       return strtobool(str, &rodata_enabled);
+       if (strtobool(str, &rodata_enabled))
+               pr_warn("Invalid option string for rodata: '%s'\n", str);
+       return 1;
 }
 __setup("rodata=", set_debug_rodata);
 #endif