1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 *  linux/init/main.c
4 *
5 *  Copyright (C) 1991, 1992  Linus Torvalds
6 *
7 *  GK 2/5/95  -  Changed to support mounting root fs via NFS
8 *  Added initrd & change_root: Werner Almesberger & Hans Lermen, Feb '96
9 *  Moan early if gcc is old, avoiding bogus kernels - Paul Gortmaker, May '96
10 *  Simplified starting of init:  Michael A. Griffith <grif@acm.org>
11 */
12
13#define DEBUG		/* Enable initcall_debug */
14
15#include <linux/types.h>
16#include <linux/extable.h>
17#include <linux/module.h>
18#include <linux/proc_fs.h>
19#include <linux/binfmts.h>
20#include <linux/kernel.h>
21#include <linux/syscalls.h>
22#include <linux/stackprotector.h>
23#include <linux/string.h>
24#include <linux/ctype.h>
25#include <linux/delay.h>
26#include <linux/ioport.h>
27#include <linux/init.h>
28#include <linux/initrd.h>
29#include <linux/memblock.h>
30#include <linux/acpi.h>
31#include <linux/bootconfig.h>
32#include <linux/console.h>
33#include <linux/nmi.h>
34#include <linux/percpu.h>
35#include <linux/kmod.h>
36#include <linux/kprobes.h>
37#include <linux/kmsan.h>
38#include <linux/vmalloc.h>
39#include <linux/kernel_stat.h>
40#include <linux/start_kernel.h>
41#include <linux/security.h>
42#include <linux/smp.h>
43#include <linux/profile.h>
44#include <linux/kfence.h>
45#include <linux/rcupdate.h>
46#include <linux/srcu.h>
47#include <linux/moduleparam.h>
48#include <linux/kallsyms.h>
49#include <linux/buildid.h>
50#include <linux/writeback.h>
51#include <linux/cpu.h>
52#include <linux/cpuset.h>
53#include <linux/cgroup.h>
54#include <linux/efi.h>
55#include <linux/tick.h>
56#include <linux/sched/isolation.h>
57#include <linux/interrupt.h>
58#include <linux/taskstats_kern.h>
59#include <linux/delayacct.h>
60#include <linux/unistd.h>
61#include <linux/utsname.h>
62#include <linux/rmap.h>
63#include <linux/mempolicy.h>
64#include <linux/key.h>
65#include <linux/debug_locks.h>
66#include <linux/debugobjects.h>
67#include <linux/lockdep.h>
68#include <linux/kmemleak.h>
69#include <linux/padata.h>
70#include <linux/pid_namespace.h>
71#include <linux/device/driver.h>
72#include <linux/kthread.h>
73#include <linux/sched.h>
74#include <linux/sched/init.h>
75#include <linux/signal.h>
76#include <linux/idr.h>
77#include <linux/kgdb.h>
78#include <linux/ftrace.h>
79#include <linux/async.h>
80#include <linux/shmem_fs.h>
81#include <linux/slab.h>
82#include <linux/perf_event.h>
83#include <linux/ptrace.h>
84#include <linux/pti.h>
85#include <linux/blkdev.h>
86#include <linux/sched/clock.h>
87#include <linux/sched/task.h>
88#include <linux/sched/task_stack.h>
89#include <linux/context_tracking.h>
90#include <linux/random.h>
91#include <linux/moduleloader.h>
92#include <linux/list.h>
93#include <linux/integrity.h>
94#include <linux/proc_ns.h>
95#include <linux/io.h>
96#include <linux/cache.h>
97#include <linux/rodata_test.h>
98#include <linux/jump_label.h>
99#include <linux/kcsan.h>
100#include <linux/init_syscalls.h>
101#include <linux/stackdepot.h>
102#include <linux/randomize_kstack.h>
103#include <linux/pidfs.h>
104#include <linux/ptdump.h>
105#include <net/net_namespace.h>
106
107#include <asm/io.h>
108#include <asm/setup.h>
109#include <asm/sections.h>
110#include <asm/cacheflush.h>
111
112#define CREATE_TRACE_POINTS
113#include <trace/events/initcall.h>
114
115#include <kunit/test.h>
116
117static int kernel_init(void *);
118
119/*
120 * Debug helper: via this flag we know that we are in 'early bootup code'
121 * where only the boot processor is running with IRQ disabled.  This means
122 * two things - IRQ must not be enabled before the flag is cleared and some
123 * operations which are not allowed with IRQ disabled are allowed while the
124 * flag is set.
125 */
126bool early_boot_irqs_disabled __read_mostly;
127
128enum system_states system_state __read_mostly;
129EXPORT_SYMBOL(system_state);
130
131/*
132 * Boot command-line arguments
133 */
134#define MAX_INIT_ARGS CONFIG_INIT_ENV_ARG_LIMIT
135#define MAX_INIT_ENVS CONFIG_INIT_ENV_ARG_LIMIT
136
137/* Default late time init is NULL. archs can override this later. */
138void (*__initdata late_time_init)(void);
139
140/* Untouched command line saved by arch-specific code. */
141char __initdata boot_command_line[COMMAND_LINE_SIZE];
142/* Untouched saved command line (eg. for /proc) */
143char *saved_command_line __ro_after_init;
144unsigned int saved_command_line_len __ro_after_init;
145/* Command line for parameter parsing */
146static char *static_command_line;
147/* Untouched extra command line */
148static char *extra_command_line;
149/* Extra init arguments */
150static char *extra_init_args;
151
152#ifdef CONFIG_BOOT_CONFIG
153/* Is bootconfig on command line? */
154static bool bootconfig_found;
155static size_t initargs_offs;
156#else
157# define bootconfig_found false
158# define initargs_offs 0
159#endif
160
161static char *execute_command;
162static char *ramdisk_execute_command = "/init";
163
164/*
165 * Used to generate warnings if static_key manipulation functions are used
166 * before jump_label_init is called.
167 */
168bool static_key_initialized __read_mostly;
169EXPORT_SYMBOL_GPL(static_key_initialized);
170
171/*
172 * If set, this is an indication to the drivers that reset the underlying
173 * device before going ahead with the initialization otherwise driver might
174 * rely on the BIOS and skip the reset operation.
175 *
176 * This is useful if kernel is booting in an unreliable environment.
177 * For ex. kdump situation where previous kernel has crashed, BIOS has been
178 * skipped and devices will be in unknown state.
179 */
180unsigned int reset_devices;
181EXPORT_SYMBOL(reset_devices);
182
183static int __init set_reset_devices(char *str)
184{
185	reset_devices = 1;
186	return 1;
187}
188
189__setup("reset_devices", set_reset_devices);
190
191static const char *argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
192const char *envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };
193static const char *panic_later, *panic_param;
194
195static bool __init obsolete_checksetup(char *line)
196{
197	const struct obs_kernel_param *p;
198	bool had_early_param = false;
199
200	p = __setup_start;
201	do {
202		int n = strlen(p->str);
203		if (parameqn(line, p->str, n)) {
204			if (p->early) {
205				/* Already done in parse_early_param?
206				 * (Needs exact match on param part).
207				 * Keep iterating, as we can have early
208				 * params and __setups of same names 8( */
209				if (line[n] == '\0' || line[n] == '=')
210					had_early_param = true;
211			} else if (!p->setup_func) {
212				pr_warn("Parameter %s is obsolete, ignored\n",
213					p->str);
214				return true;
215			} else if (p->setup_func(line + n))
216				return true;
217		}
218		p++;
219	} while (p < __setup_end);
220
221	return had_early_param;
222}
223
224/*
225 * This should be approx 2 Bo*oMips to start (note initial shift), and will
226 * still work even if initially too large, it will just take slightly longer
227 */
228unsigned long loops_per_jiffy = (1<<12);
229EXPORT_SYMBOL(loops_per_jiffy);
230
231static int __init debug_kernel(char *str)
232{
233	console_loglevel = CONSOLE_LOGLEVEL_DEBUG;
234	return 0;
235}
236
237static int __init quiet_kernel(char *str)
238{
239	console_loglevel = CONSOLE_LOGLEVEL_QUIET;
240	return 0;
241}
242
243early_param("debug", debug_kernel);
244early_param("quiet", quiet_kernel);
245
246static int __init loglevel(char *str)
247{
248	int newlevel;
249
250	/*
251	 * Only update loglevel value when a correct setting was passed,
252	 * to prevent blind crashes (when loglevel being set to 0) that
253	 * are quite hard to debug
254	 */
255	if (get_option(&str, &newlevel)) {
256		console_loglevel = newlevel;
257		return 0;
258	}
259
260	return -EINVAL;
261}
262
263early_param("loglevel", loglevel);
264
265#ifdef CONFIG_BLK_DEV_INITRD
266static void * __init get_boot_config_from_initrd(size_t *_size)
267{
268	u32 size, csum;
269	char *data;
270	u32 *hdr;
271	int i;
272
273	if (!initrd_end)
274		return NULL;
275
276	data = (char *)initrd_end - BOOTCONFIG_MAGIC_LEN;
277	/*
278	 * Since Grub may align the size of initrd to 4, we must
279	 * check the preceding 3 bytes as well.
280	 */
281	for (i = 0; i < 4; i++) {
282		if (!memcmp(data, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN))
283			goto found;
284		data--;
285	}
286	return NULL;
287
288found:
289	hdr = (u32 *)(data - 8);
290	size = le32_to_cpu(hdr[0]);
291	csum = le32_to_cpu(hdr[1]);
292
293	data = ((void *)hdr) - size;
294	if ((unsigned long)data < initrd_start) {
295		pr_err("bootconfig size %d is greater than initrd size %ld\n",
296			size, initrd_end - initrd_start);
297		return NULL;
298	}
299
300	if (xbc_calc_checksum(data, size) != csum) {
301		pr_err("bootconfig checksum failed\n");
302		return NULL;
303	}
304
305	/* Remove bootconfig from initramfs/initrd */
306	initrd_end = (unsigned long)data;
307	if (_size)
308		*_size = size;
309
310	return data;
311}
312#else
313static void * __init get_boot_config_from_initrd(size_t *_size)
314{
315	return NULL;
316}
317#endif
318
319#ifdef CONFIG_BOOT_CONFIG
320
321static char xbc_namebuf[XBC_KEYLEN_MAX] __initdata;
322
323#define rest(dst, end) ((end) > (dst) ? (end) - (dst) : 0)
324
325static int __init xbc_snprint_cmdline(char *buf, size_t size,
326				      struct xbc_node *root)
327{
328	struct xbc_node *knode, *vnode;
329	char *end = buf + size;
330	const char *val, *q;
331	int ret;
332
333	xbc_node_for_each_key_value(root, knode, val) {
334		ret = xbc_node_compose_key_after(root, knode,
335					xbc_namebuf, XBC_KEYLEN_MAX);
336		if (ret < 0)
337			return ret;
338
339		vnode = xbc_node_get_child(knode);
340		if (!vnode) {
341			ret = snprintf(buf, rest(buf, end), "%s ", xbc_namebuf);
342			if (ret < 0)
343				return ret;
344			buf += ret;
345			continue;
346		}
347		xbc_array_for_each_value(vnode, val) {
348			q = strpbrk(val, " \t\r\n") ? "\"" : "";
349			ret = snprintf(buf, rest(buf, end), "%s=%s%s%s ",
350				       xbc_namebuf, q, val, q);
351			if (ret < 0)
352				return ret;
353			buf += ret;
354		}
355	}
356
357	return buf - (end - size);
358}
359#undef rest
360
361/* Make an extra command line under given key word */
362static char * __init xbc_make_cmdline(const char *key)
363{
364	struct xbc_node *root;
365	char *new_cmdline;
366	int ret, len = 0;
367
368	root = xbc_find_node(key);
369	if (!root)
370		return NULL;
371
372	/* Count required buffer size */
373	len = xbc_snprint_cmdline(NULL, 0, root);
374	if (len <= 0)
375		return NULL;
376
377	new_cmdline = memblock_alloc(len + 1, SMP_CACHE_BYTES);
378	if (!new_cmdline) {
379		pr_err("Failed to allocate memory for extra kernel cmdline.\n");
380		return NULL;
381	}
382
383	ret = xbc_snprint_cmdline(new_cmdline, len + 1, root);
384	if (ret < 0 || ret > len) {
385		pr_err("Failed to print extra kernel cmdline.\n");
386		memblock_free(new_cmdline, len + 1);
387		return NULL;
388	}
389
390	return new_cmdline;
391}
392
393static int __init bootconfig_params(char *param, char *val,
394				    const char *unused, void *arg)
395{
396	if (strcmp(param, "bootconfig") == 0) {
397		bootconfig_found = true;
398	}
399	return 0;
400}
401
402static int __init warn_bootconfig(char *str)
403{
404	/* The 'bootconfig' has been handled by bootconfig_params(). */
405	return 0;
406}
407
408static void __init setup_boot_config(void)
409{
410	static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
411	const char *msg, *data;
412	int pos, ret;
413	size_t size;
414	char *err;
415
416	/* Cut out the bootconfig data even if we have no bootconfig option */
417	data = get_boot_config_from_initrd(&size);
418	/* If there is no bootconfig in initrd, try embedded one. */
419	if (!data)
420		data = xbc_get_embedded_bootconfig(&size);
421
422	strscpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
423	err = parse_args("bootconfig", tmp_cmdline, NULL, 0, 0, 0, NULL,
424			 bootconfig_params);
425
426	if (IS_ERR(err) || !(bootconfig_found || IS_ENABLED(CONFIG_BOOT_CONFIG_FORCE)))
427		return;
428
429	/* parse_args() stops at the next param of '--' and returns an address */
430	if (err)
431		initargs_offs = err - tmp_cmdline;
432
433	if (!data) {
434		/* If user intended to use bootconfig, show an error level message */
435		if (bootconfig_found)
436			pr_err("'bootconfig' found on command line, but no bootconfig found\n");
437		else
438			pr_info("No bootconfig data provided, so skipping bootconfig");
439		return;
440	}
441
442	if (size >= XBC_DATA_MAX) {
443		pr_err("bootconfig size %ld greater than max size %d\n",
444			(long)size, XBC_DATA_MAX);
445		return;
446	}
447
448	ret = xbc_init(data, size, &msg, &pos);
449	if (ret < 0) {
450		if (pos < 0)
451			pr_err("Failed to init bootconfig: %s.\n", msg);
452		else
453			pr_err("Failed to parse bootconfig: %s at %d.\n",
454				msg, pos);
455	} else {
456		xbc_get_info(&ret, NULL);
457		pr_info("Load bootconfig: %ld bytes %d nodes\n", (long)size, ret);
458		/* keys starting with "kernel." are passed via cmdline */
459		extra_command_line = xbc_make_cmdline("kernel");
460		/* Also, "init." keys are init arguments */
461		extra_init_args = xbc_make_cmdline("init");
462	}
463	return;
464}
465
466static void __init exit_boot_config(void)
467{
468	xbc_exit();
469}
470
471#else	/* !CONFIG_BOOT_CONFIG */
472
473static void __init setup_boot_config(void)
474{
475	/* Remove bootconfig data from initrd */
476	get_boot_config_from_initrd(NULL);
477}
478
479static int __init warn_bootconfig(char *str)
480{
481	pr_warn("WARNING: 'bootconfig' found on the kernel command line but CONFIG_BOOT_CONFIG is not set.\n");
482	return 0;
483}
484
485#define exit_boot_config()	do {} while (0)
486
487#endif	/* CONFIG_BOOT_CONFIG */
488
489early_param("bootconfig", warn_bootconfig);
490
491bool __init cmdline_has_extra_options(void)
492{
493	return extra_command_line || extra_init_args;
494}
495
496/* Change NUL term back to "=", to make "param" the whole string. */
497static void __init repair_env_string(char *param, char *val)
498{
499	if (val) {
500		/* param=val or param="val"? */
501		if (val == param+strlen(param)+1)
502			val[-1] = '=';
503		else if (val == param+strlen(param)+2) {
504			val[-2] = '=';
505			memmove(val-1, val, strlen(val)+1);
506		} else
507			BUG();
508	}
509}
510
511/* Anything after -- gets handed straight to init. */
512static int __init set_init_arg(char *param, char *val,
513			       const char *unused, void *arg)
514{
515	unsigned int i;
516
517	if (panic_later)
518		return 0;
519
520	repair_env_string(param, val);
521
522	for (i = 0; argv_init[i]; i++) {
523		if (i == MAX_INIT_ARGS) {
524			panic_later = "init";
525			panic_param = param;
526			return 0;
527		}
528	}
529	argv_init[i] = param;
530	return 0;
531}
532
533/*
534 * Unknown boot options get handed to init, unless they look like
535 * unused parameters (modprobe will find them in /proc/cmdline).
536 */
537static int __init unknown_bootoption(char *param, char *val,
538				     const char *unused, void *arg)
539{
540	size_t len = strlen(param);
541
542	/* Handle params aliased to sysctls */
543	if (sysctl_is_alias(param))
544		return 0;
545
546	repair_env_string(param, val);
547
548	/* Handle obsolete-style parameters */
549	if (obsolete_checksetup(param))
550		return 0;
551
552	/* Unused module parameter. */
553	if (strnchr(param, len, '.'))
554		return 0;
555
556	if (panic_later)
557		return 0;
558
559	if (val) {
560		/* Environment option */
561		unsigned int i;
562		for (i = 0; envp_init[i]; i++) {
563			if (i == MAX_INIT_ENVS) {
564				panic_later = "env";
565				panic_param = param;
566			}
567			if (!strncmp(param, envp_init[i], len+1))
568				break;
569		}
570		envp_init[i] = param;
571	} else {
572		/* Command line option */
573		unsigned int i;
574		for (i = 0; argv_init[i]; i++) {
575			if (i == MAX_INIT_ARGS) {
576				panic_later = "init";
577				panic_param = param;
578			}
579		}
580		argv_init[i] = param;
581	}
582	return 0;
583}
584
585static int __init init_setup(char *str)
586{
587	unsigned int i;
588
589	execute_command = str;
590	/*
591	 * In case LILO is going to boot us with default command line,
592	 * it prepends "auto" before the whole cmdline which makes
593	 * the shell think it should execute a script with such name.
594	 * So we ignore all arguments entered _before_ init=... [MJ]
595	 */
596	for (i = 1; i < MAX_INIT_ARGS; i++)
597		argv_init[i] = NULL;
598	return 1;
599}
600__setup("init=", init_setup);
601
602static int __init rdinit_setup(char *str)
603{
604	unsigned int i;
605
606	ramdisk_execute_command = str;
607	/* See "auto" comment in init_setup */
608	for (i = 1; i < MAX_INIT_ARGS; i++)
609		argv_init[i] = NULL;
610	return 1;
611}
612__setup("rdinit=", rdinit_setup);
613
614#ifndef CONFIG_SMP
615static inline void setup_nr_cpu_ids(void) { }
616static inline void smp_prepare_cpus(unsigned int maxcpus) { }
617#endif
618
619/*
620 * We need to store the untouched command line for future reference.
621 * We also need to store the touched command line since the parameter
622 * parsing is performed in place, and we should allow a component to
623 * store reference of name/value for future reference.
624 */
625static void __init setup_command_line(char *command_line)
626{
627	size_t len, xlen = 0, ilen = 0;
628
629	if (extra_command_line)
630		xlen = strlen(extra_command_line);
631	if (extra_init_args) {
632		extra_init_args = strim(extra_init_args); /* remove trailing space */
633		ilen = strlen(extra_init_args) + 4; /* for " -- " */
634	}
635
636	len = xlen + strlen(boot_command_line) + ilen + 1;
637
638	saved_command_line = memblock_alloc(len, SMP_CACHE_BYTES);
639	if (!saved_command_line)
640		panic("%s: Failed to allocate %zu bytes\n", __func__, len);
641
642	len = xlen + strlen(command_line) + 1;
643
644	static_command_line = memblock_alloc(len, SMP_CACHE_BYTES);
645	if (!static_command_line)
646		panic("%s: Failed to allocate %zu bytes\n", __func__, len);
647
648	if (xlen) {
649		/*
650		 * We have to put extra_command_line before boot command
651		 * lines because there could be dashes (separator of init
652		 * command line) in the command lines.
653		 */
654		strcpy(saved_command_line, extra_command_line);
655		strcpy(static_command_line, extra_command_line);
656	}
657	strcpy(saved_command_line + xlen, boot_command_line);
658	strcpy(static_command_line + xlen, command_line);
659
660	if (ilen) {
661		/*
662		 * Append supplemental init boot args to saved_command_line
663		 * so that user can check what command line options passed
664		 * to init.
665		 * The order should always be
666		 * " -- "[bootconfig init-param][cmdline init-param]
667		 */
668		if (initargs_offs) {
669			len = xlen + initargs_offs;
670			strcpy(saved_command_line + len, extra_init_args);
671			len += ilen - 4;	/* strlen(extra_init_args) */
672			strcpy(saved_command_line + len,
673				boot_command_line + initargs_offs - 1);
674		} else {
675			len = strlen(saved_command_line);
676			strcpy(saved_command_line + len, " -- ");
677			len += 4;
678			strcpy(saved_command_line + len, extra_init_args);
679		}
680	}
681
682	saved_command_line_len = strlen(saved_command_line);
683}
684
685/*
686 * We need to finalize in a non-__init function or else race conditions
687 * between the root thread and the init thread may cause start_kernel to
688 * be reaped by free_initmem before the root thread has proceeded to
689 * cpu_idle.
690 *
691 * gcc-3.4 accidentally inlines this function, so use noinline.
692 */
693
694static __initdata DECLARE_COMPLETION(kthreadd_done);
695
696static noinline void __ref __noreturn rest_init(void)
697{
698	struct task_struct *tsk;
699	int pid;
700
701	rcu_scheduler_starting();
702	/*
703	 * We need to spawn init first so that it obtains pid 1, however
704	 * the init task will end up wanting to create kthreads, which, if
705	 * we schedule it before we create kthreadd, will OOPS.
706	 */
707	pid = user_mode_thread(kernel_init, NULL, CLONE_FS);
708	/*
709	 * Pin init on the boot CPU. Task migration is not properly working
710	 * until sched_init_smp() has been run. It will set the allowed
711	 * CPUs for init to the non isolated CPUs.
712	 */
713	rcu_read_lock();
714	tsk = find_task_by_pid_ns(pid, &init_pid_ns);
715	tsk->flags |= PF_NO_SETAFFINITY;
716	set_cpus_allowed_ptr(tsk, cpumask_of(smp_processor_id()));
717	rcu_read_unlock();
718
719	numa_default_policy();
720	pid = kernel_thread(kthreadd, NULL, NULL, CLONE_FS | CLONE_FILES);
721	rcu_read_lock();
722	kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
723	rcu_read_unlock();
724
725	/*
726	 * Enable might_sleep() and smp_processor_id() checks.
727	 * They cannot be enabled earlier because with CONFIG_PREEMPTION=y
728	 * kernel_thread() would trigger might_sleep() splats. With
729	 * CONFIG_PREEMPT_VOLUNTARY=y the init task might have scheduled
730	 * already, but it's stuck on the kthreadd_done completion.
731	 */
732	system_state = SYSTEM_SCHEDULING;
733
734	complete(&kthreadd_done);
735
736	/*
737	 * The boot idle thread must execute schedule()
738	 * at least once to get things moving:
739	 */
740	schedule_preempt_disabled();
741	/* Call into cpu_idle with preempt disabled */
742	cpu_startup_entry(CPUHP_ONLINE);
743}
744
745/* Check for early params. */
746static int __init do_early_param(char *param, char *val,
747				 const char *unused, void *arg)
748{
749	const struct obs_kernel_param *p;
750
751	for (p = __setup_start; p < __setup_end; p++) {
752		if ((p->early && parameq(param, p->str)) ||
753		    (strcmp(param, "console") == 0 &&
754		     strcmp(p->str, "earlycon") == 0)
755		) {
756			if (p->setup_func(val) != 0)
757				pr_warn("Malformed early option '%s'\n", param);
758		}
759	}
760	/* We accept everything at this stage. */
761	return 0;
762}
763
764void __init parse_early_options(char *cmdline)
765{
766	parse_args("early options", cmdline, NULL, 0, 0, 0, NULL,
767		   do_early_param);
768}
769
770/* Arch code calls this early on, or if not, just before other parsing. */
771void __init parse_early_param(void)
772{
773	static int done __initdata;
774	static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
775
776	if (done)
777		return;
778
779	/* All fall through to do_early_param. */
780	strscpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
781	parse_early_options(tmp_cmdline);
782	done = 1;
783}
784
785void __init __weak arch_post_acpi_subsys_init(void) { }
786
787void __init __weak smp_setup_processor_id(void)
788{
789}
790
791void __init __weak smp_prepare_boot_cpu(void)
792{
793}
794
795# if THREAD_SIZE >= PAGE_SIZE
796void __init __weak thread_stack_cache_init(void)
797{
798}
799#endif
800
801void __init __weak poking_init(void) { }
802
803void __init __weak pgtable_cache_init(void) { }
804
805void __init __weak trap_init(void) { }
806
807bool initcall_debug;
808core_param(initcall_debug, initcall_debug, bool, 0644);
809
810#ifdef TRACEPOINTS_ENABLED
811static void __init initcall_debug_enable(void);
812#else
813static inline void initcall_debug_enable(void)
814{
815}
816#endif
817
818#ifdef CONFIG_RANDOMIZE_KSTACK_OFFSET
819DEFINE_STATIC_KEY_MAYBE_RO(CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT,
820			   randomize_kstack_offset);
821DEFINE_PER_CPU(u32, kstack_offset);
822
823static int __init early_randomize_kstack_offset(char *buf)
824{
825	int ret;
826	bool bool_result;
827
828	ret = kstrtobool(buf, &bool_result);
829	if (ret)
830		return ret;
831
832	if (bool_result)
833		static_branch_enable(&randomize_kstack_offset);
834	else
835		static_branch_disable(&randomize_kstack_offset);
836	return 0;
837}
838early_param("randomize_kstack_offset", early_randomize_kstack_offset);
839#endif
840
841static void __init print_unknown_bootoptions(void)
842{
843	char *unknown_options;
844	char *end;
845	const char *const *p;
846	size_t len;
847
848	if (panic_later || (!argv_init[1] && !envp_init[2]))
849		return;
850
851	/*
852	 * Determine how many options we have to print out, plus a space
853	 * before each
854	 */
855	len = 1; /* null terminator */
856	for (p = &argv_init[1]; *p; p++) {
857		len++;
858		len += strlen(*p);
859	}
860	for (p = &envp_init[2]; *p; p++) {
861		len++;
862		len += strlen(*p);
863	}
864
865	unknown_options = memblock_alloc(len, SMP_CACHE_BYTES);
866	if (!unknown_options) {
867		pr_err("%s: Failed to allocate %zu bytes\n",
868			__func__, len);
869		return;
870	}
871	end = unknown_options;
872
873	for (p = &argv_init[1]; *p; p++)
874		end += sprintf(end, " %s", *p);
875	for (p = &envp_init[2]; *p; p++)
876		end += sprintf(end, " %s", *p);
877
878	/* Start at unknown_options[1] to skip the initial space */
879	pr_notice("Unknown kernel command line parameters \"%s\", will be passed to user space.\n",
880		&unknown_options[1]);
881	memblock_free(unknown_options, len);
882}
883
884asmlinkage __visible __init __no_sanitize_address __noreturn __no_stack_protector
885void start_kernel(void)
886{
887	char *command_line;
888	char *after_dashes;
889
890	set_task_stack_end_magic(&init_task);
891	smp_setup_processor_id();
892	debug_objects_early_init();
893	init_vmlinux_build_id();
894
895	cgroup_init_early();
896
897	local_irq_disable();
898	early_boot_irqs_disabled = true;
899
900	/*
901	 * Interrupts are still disabled. Do necessary setups, then
902	 * enable them.
903	 */
904	boot_cpu_init();
905	page_address_init();
906	pr_notice("%s", linux_banner);
907	early_security_init();
908	setup_arch(&command_line);
909	setup_boot_config();
910	setup_command_line(command_line);
911	setup_nr_cpu_ids();
912	setup_per_cpu_areas();
913	smp_prepare_boot_cpu();	/* arch-specific boot-cpu hooks */
914	boot_cpu_hotplug_init();
915
916	pr_notice("Kernel command line: %s\n", saved_command_line);
917	/* parameters may set static keys */
918	jump_label_init();
919	parse_early_param();
920	after_dashes = parse_args("Booting kernel",
921				  static_command_line, __start___param,
922				  __stop___param - __start___param,
923				  -1, -1, NULL, &unknown_bootoption);
924	print_unknown_bootoptions();
925	if (!IS_ERR_OR_NULL(after_dashes))
926		parse_args("Setting init args", after_dashes, NULL, 0, -1, -1,
927			   NULL, set_init_arg);
928	if (extra_init_args)
929		parse_args("Setting extra init args", extra_init_args,
930			   NULL, 0, -1, -1, NULL, set_init_arg);
931
932	/* Architectural and non-timekeeping rng init, before allocator init */
933	random_init_early(command_line);
934
935	/*
936	 * These use large bootmem allocations and must precede
937	 * initalization of page allocator
938	 */
939	setup_log_buf(0);
940	vfs_caches_init_early();
941	sort_main_extable();
942	trap_init();
943	mm_core_init();
944	poking_init();
945	ftrace_init();
946
947	/* trace_printk can be enabled here */
948	early_trace_init();
949
950	/*
951	 * Set up the scheduler prior starting any interrupts (such as the
952	 * timer interrupt). Full topology setup happens at smp_init()
953	 * time - but meanwhile we still have a functioning scheduler.
954	 */
955	sched_init();
956
957	if (WARN(!irqs_disabled(),
958		 "Interrupts were enabled *very* early, fixing it\n"))
959		local_irq_disable();
960	radix_tree_init();
961	maple_tree_init();
962
963	/*
964	 * Set up housekeeping before setting up workqueues to allow the unbound
965	 * workqueue to take non-housekeeping into account.
966	 */
967	housekeeping_init();
968
969	/*
970	 * Allow workqueue creation and work item queueing/cancelling
971	 * early.  Work item execution depends on kthreads and starts after
972	 * workqueue_init().
973	 */
974	workqueue_init_early();
975
976	rcu_init();
977
978	/* Trace events are available after this */
979	trace_init();
980
981	if (initcall_debug)
982		initcall_debug_enable();
983
984	context_tracking_init();
985	/* init some links before init_ISA_irqs() */
986	early_irq_init();
987	init_IRQ();
988	tick_init();
989	rcu_init_nohz();
990	init_timers();
991	srcu_init();
992	hrtimers_init();
993	softirq_init();
994	timekeeping_init();
995	time_init();
996
997	/* This must be after timekeeping is initialized */
998	random_init();
999
1000	/* These make use of the fully initialized rng */
1001	kfence_init();
1002	boot_init_stack_canary();
1003
1004	perf_event_init();
1005	profile_init();
1006	call_function_init();
1007	WARN(!irqs_disabled(), "Interrupts were enabled early\n");
1008
1009	early_boot_irqs_disabled = false;
1010	local_irq_enable();
1011
1012	kmem_cache_init_late();
1013
1014	/*
1015	 * HACK ALERT! This is early. We're enabling the console before
1016	 * we've done PCI setups etc, and console_init() must be aware of
1017	 * this. But we do want output early, in case something goes wrong.
1018	 */
1019	console_init();
1020	if (panic_later)
1021		panic("Too many boot %s vars at `%s'", panic_later,
1022		      panic_param);
1023
1024	lockdep_init();
1025
1026	/*
1027	 * Need to run this when irqs are enabled, because it wants
1028	 * to self-test [hard/soft]-irqs on/off lock inversion bugs
1029	 * too:
1030	 */
1031	locking_selftest();
1032
1033#ifdef CONFIG_BLK_DEV_INITRD
1034	if (initrd_start && !initrd_below_start_ok &&
1035	    page_to_pfn(virt_to_page((void *)initrd_start)) < min_low_pfn) {
1036		pr_crit("initrd overwritten (0x%08lx < 0x%08lx) - disabling it.\n",
1037		    page_to_pfn(virt_to_page((void *)initrd_start)),
1038		    min_low_pfn);
1039		initrd_start = 0;
1040	}
1041#endif
1042	setup_per_cpu_pageset();
1043	numa_policy_init();
1044	acpi_early_init();
1045	if (late_time_init)
1046		late_time_init();
1047	sched_clock_init();
1048	calibrate_delay();
1049
1050	arch_cpu_finalize_init();
1051
1052	pid_idr_init();
1053	anon_vma_init();
1054#ifdef CONFIG_X86
1055	if (efi_enabled(EFI_RUNTIME_SERVICES))
1056		efi_enter_virtual_mode();
1057#endif
1058	thread_stack_cache_init();
1059	cred_init();
1060	fork_init();
1061	proc_caches_init();
1062	uts_ns_init();
1063	key_init();
1064	security_init();
1065	dbg_late_init();
1066	net_ns_init();
1067	vfs_caches_init();
1068	pagecache_init();
1069	signals_init();
1070	seq_file_init();
1071	proc_root_init();
1072	nsfs_init();
1073	pidfs_init();
1074	cpuset_init();
1075	cgroup_init();
1076	taskstats_init_early();
1077	delayacct_init();
1078
1079	acpi_subsystem_init();
1080	arch_post_acpi_subsys_init();
1081	kcsan_init();
1082
1083	/* Do the rest non-__init'ed, we're now alive */
1084	rest_init();
1085
1086	/*
1087	 * Avoid stack canaries in callers of boot_init_stack_canary for gcc-10
1088	 * and older.
1089	 */
1090#if !__has_attribute(__no_stack_protector__)
1091	prevent_tail_call_optimization();
1092#endif
1093}
1094
1095/* Call all constructor functions linked into the kernel. */
1096static void __init do_ctors(void)
1097{
1098/*
1099 * For UML, the constructors have already been called by the
1100 * normal setup code as it's just a normal ELF binary, so we
1101 * cannot do it again - but we do need CONFIG_CONSTRUCTORS
1102 * even on UML for modules.
1103 */
1104#if defined(CONFIG_CONSTRUCTORS) && !defined(CONFIG_UML)
1105	ctor_fn_t *fn = (ctor_fn_t *) __ctors_start;
1106
1107	for (; fn < (ctor_fn_t *) __ctors_end; fn++)
1108		(*fn)();
1109#endif
1110}
1111
1112#ifdef CONFIG_KALLSYMS
1113struct blacklist_entry {
1114	struct list_head next;
1115	char *buf;
1116};
1117
1118static __initdata_or_module LIST_HEAD(blacklisted_initcalls);
1119
1120static int __init initcall_blacklist(char *str)
1121{
1122	char *str_entry;
1123	struct blacklist_entry *entry;
1124
1125	/* str argument is a comma-separated list of functions */
1126	do {
1127		str_entry = strsep(&str, ",");
1128		if (str_entry) {
1129			pr_debug("blacklisting initcall %s\n", str_entry);
1130			entry = memblock_alloc(sizeof(*entry),
1131					       SMP_CACHE_BYTES);
1132			if (!entry)
1133				panic("%s: Failed to allocate %zu bytes\n",
1134				      __func__, sizeof(*entry));
1135			entry->buf = memblock_alloc(strlen(str_entry) + 1,
1136						    SMP_CACHE_BYTES);
1137			if (!entry->buf)
1138				panic("%s: Failed to allocate %zu bytes\n",
1139				      __func__, strlen(str_entry) + 1);
1140			strcpy(entry->buf, str_entry);
1141			list_add(&entry->next, &blacklisted_initcalls);
1142		}
1143	} while (str_entry);
1144
1145	return 1;
1146}
1147
1148static bool __init_or_module initcall_blacklisted(initcall_t fn)
1149{
1150	struct blacklist_entry *entry;
1151	char fn_name[KSYM_SYMBOL_LEN];
1152	unsigned long addr;
1153
1154	if (list_empty(&blacklisted_initcalls))
1155		return false;
1156
1157	addr = (unsigned long) dereference_function_descriptor(fn);
1158	sprint_symbol_no_offset(fn_name, addr);
1159
1160	/*
1161	 * fn will be "function_name [module_name]" where [module_name] is not
1162	 * displayed for built-in init functions.  Strip off the [module_name].
1163	 */
1164	strreplace(fn_name, ' ', '\0');
1165
1166	list_for_each_entry(entry, &blacklisted_initcalls, next) {
1167		if (!strcmp(fn_name, entry->buf)) {
1168			pr_debug("initcall %s blacklisted\n", fn_name);
1169			return true;
1170		}
1171	}
1172
1173	return false;
1174}
1175#else
1176static int __init initcall_blacklist(char *str)
1177{
1178	pr_warn("initcall_blacklist requires CONFIG_KALLSYMS\n");
1179	return 0;
1180}
1181
1182static bool __init_or_module initcall_blacklisted(initcall_t fn)
1183{
1184	return false;
1185}
1186#endif
1187__setup("initcall_blacklist=", initcall_blacklist);
1188
1189static __init_or_module void
1190trace_initcall_start_cb(void *data, initcall_t fn)
1191{
1192	ktime_t *calltime = data;
1193
1194	printk(KERN_DEBUG "calling  %pS @ %i\n", fn, task_pid_nr(current));
1195	*calltime = ktime_get();
1196}
1197
1198static __init_or_module void
1199trace_initcall_finish_cb(void *data, initcall_t fn, int ret)
1200{
1201	ktime_t rettime, *calltime = data;
1202
1203	rettime = ktime_get();
1204	printk(KERN_DEBUG "initcall %pS returned %d after %lld usecs\n",
1205		 fn, ret, (unsigned long long)ktime_us_delta(rettime, *calltime));
1206}
1207
1208static ktime_t initcall_calltime;
1209
1210#ifdef TRACEPOINTS_ENABLED
1211static void __init initcall_debug_enable(void)
1212{
1213	int ret;
1214
1215	ret = register_trace_initcall_start(trace_initcall_start_cb,
1216					    &initcall_calltime);
1217	ret |= register_trace_initcall_finish(trace_initcall_finish_cb,
1218					      &initcall_calltime);
1219	WARN(ret, "Failed to register initcall tracepoints\n");
1220}
1221# define do_trace_initcall_start	trace_initcall_start
1222# define do_trace_initcall_finish	trace_initcall_finish
1223#else
1224static inline void do_trace_initcall_start(initcall_t fn)
1225{
1226	if (!initcall_debug)
1227		return;
1228	trace_initcall_start_cb(&initcall_calltime, fn);
1229}
1230static inline void do_trace_initcall_finish(initcall_t fn, int ret)
1231{
1232	if (!initcall_debug)
1233		return;
1234	trace_initcall_finish_cb(&initcall_calltime, fn, ret);
1235}
1236#endif /* !TRACEPOINTS_ENABLED */
1237
1238int __init_or_module do_one_initcall(initcall_t fn)
1239{
1240	int count = preempt_count();
1241	char msgbuf[64];
1242	int ret;
1243
1244	if (initcall_blacklisted(fn))
1245		return -EPERM;
1246
1247	do_trace_initcall_start(fn);
1248	ret = fn();
1249	do_trace_initcall_finish(fn, ret);
1250
1251	msgbuf[0] = 0;
1252
1253	if (preempt_count() != count) {
1254		sprintf(msgbuf, "preemption imbalance ");
1255		preempt_count_set(count);
1256	}
1257	if (irqs_disabled()) {
1258		strlcat(msgbuf, "disabled interrupts ", sizeof(msgbuf));
1259		local_irq_enable();
1260	}
1261	WARN(msgbuf[0], "initcall %pS returned with %s\n", fn, msgbuf);
1262
1263	add_latent_entropy();
1264	return ret;
1265}
1266
1267
1268static initcall_entry_t *initcall_levels[] __initdata = {
1269	__initcall0_start,
1270	__initcall1_start,
1271	__initcall2_start,
1272	__initcall3_start,
1273	__initcall4_start,
1274	__initcall5_start,
1275	__initcall6_start,
1276	__initcall7_start,
1277	__initcall_end,
1278};
1279
1280/* Keep these in sync with initcalls in include/linux/init.h */
1281static const char *initcall_level_names[] __initdata = {
1282	"pure",
1283	"core",
1284	"postcore",
1285	"arch",
1286	"subsys",
1287	"fs",
1288	"device",
1289	"late",
1290};
1291
1292static int __init ignore_unknown_bootoption(char *param, char *val,
1293			       const char *unused, void *arg)
1294{
1295	return 0;
1296}
1297
1298static void __init do_initcall_level(int level, char *command_line)
1299{
1300	initcall_entry_t *fn;
1301
1302	parse_args(initcall_level_names[level],
1303		   command_line, __start___param,
1304		   __stop___param - __start___param,
1305		   level, level,
1306		   NULL, ignore_unknown_bootoption);
1307
1308	trace_initcall_level(initcall_level_names[level]);
1309	for (fn = initcall_levels[level]; fn < initcall_levels[level+1]; fn++)
1310		do_one_initcall(initcall_from_entry(fn));
1311}
1312
1313static void __init do_initcalls(void)
1314{
1315	int level;
1316	size_t len = saved_command_line_len + 1;
1317	char *command_line;
1318
1319	command_line = kzalloc(len, GFP_KERNEL);
1320	if (!command_line)
1321		panic("%s: Failed to allocate %zu bytes\n", __func__, len);
1322
1323	for (level = 0; level < ARRAY_SIZE(initcall_levels) - 1; level++) {
1324		/* Parser modifies command_line, restore it each time */
1325		strcpy(command_line, saved_command_line);
1326		do_initcall_level(level, command_line);
1327	}
1328
1329	kfree(command_line);
1330}
1331
1332/*
1333 * Ok, the machine is now initialized. None of the devices
1334 * have been touched yet, but the CPU subsystem is up and
1335 * running, and memory and process management works.
1336 *
1337 * Now we can finally start doing some real work..
1338 */
1339static void __init do_basic_setup(void)
1340{
1341	cpuset_init_smp();
1342	driver_init();
1343	init_irq_proc();
1344	do_ctors();
1345	do_initcalls();
1346}
1347
1348static void __init do_pre_smp_initcalls(void)
1349{
1350	initcall_entry_t *fn;
1351
1352	trace_initcall_level("early");
1353	for (fn = __initcall_start; fn < __initcall0_start; fn++)
1354		do_one_initcall(initcall_from_entry(fn));
1355}
1356
1357static int run_init_process(const char *init_filename)
1358{
1359	const char *const *p;
1360
1361	argv_init[0] = init_filename;
1362	pr_info("Run %s as init process\n", init_filename);
1363	pr_debug("  with arguments:\n");
1364	for (p = argv_init; *p; p++)
1365		pr_debug("    %s\n", *p);
1366	pr_debug("  with environment:\n");
1367	for (p = envp_init; *p; p++)
1368		pr_debug("    %s\n", *p);
1369	return kernel_execve(init_filename, argv_init, envp_init);
1370}
1371
1372static int try_to_run_init_process(const char *init_filename)
1373{
1374	int ret;
1375
1376	ret = run_init_process(init_filename);
1377
1378	if (ret && ret != -ENOENT) {
1379		pr_err("Starting init: %s exists but couldn't execute it (error %d)\n",
1380		       init_filename, ret);
1381	}
1382
1383	return ret;
1384}
1385
1386static noinline void __init kernel_init_freeable(void);
1387
1388#if defined(CONFIG_STRICT_KERNEL_RWX) || defined(CONFIG_STRICT_MODULE_RWX)
1389bool rodata_enabled __ro_after_init = true;
1390
1391#ifndef arch_parse_debug_rodata
1392static inline bool arch_parse_debug_rodata(char *str) { return false; }
1393#endif
1394
1395static int __init set_debug_rodata(char *str)
1396{
1397	if (arch_parse_debug_rodata(str))
1398		return 0;
1399
1400	if (str && !strcmp(str, "on"))
1401		rodata_enabled = true;
1402	else if (str && !strcmp(str, "off"))
1403		rodata_enabled = false;
1404	else
1405		pr_warn("Invalid option string for rodata: '%s'\n", str);
1406	return 0;
1407}
1408early_param("rodata", set_debug_rodata);
1409#endif
1410
1411static void mark_readonly(void)
1412{
1413	if (IS_ENABLED(CONFIG_STRICT_KERNEL_RWX) && rodata_enabled) {
1414		/*
1415		 * load_module() results in W+X mappings, which are cleaned
1416		 * up with init_free_wq. Let's make sure that queued work is
1417		 * flushed so that we don't hit false positives looking for
1418		 * insecure pages which are W+X.
1419		 */
1420		flush_module_init_free_work();
1421		jump_label_init_ro();
1422		mark_rodata_ro();
1423		debug_checkwx();
1424		rodata_test();
1425	} else if (IS_ENABLED(CONFIG_STRICT_KERNEL_RWX)) {
1426		pr_info("Kernel memory protection disabled.\n");
1427	} else if (IS_ENABLED(CONFIG_ARCH_HAS_STRICT_KERNEL_RWX)) {
1428		pr_warn("Kernel memory protection not selected by kernel config.\n");
1429	} else {
1430		pr_warn("This architecture does not have kernel memory protection.\n");
1431	}
1432}
1433
1434void __weak free_initmem(void)
1435{
1436	free_initmem_default(POISON_FREE_INITMEM);
1437}
1438
1439static int __ref kernel_init(void *unused)
1440{
1441	int ret;
1442
1443	/*
1444	 * Wait until kthreadd is all set-up.
1445	 */
1446	wait_for_completion(&kthreadd_done);
1447
1448	kernel_init_freeable();
1449	/* need to finish all async __init code before freeing the memory */
1450	async_synchronize_full();
1451
1452	system_state = SYSTEM_FREEING_INITMEM;
1453	kprobe_free_init_mem();
1454	ftrace_free_init_mem();
1455	kgdb_free_init_mem();
1456	exit_boot_config();
1457	free_initmem();
1458	mark_readonly();
1459
1460	/*
1461	 * Kernel mappings are now finalized - update the userspace page-table
1462	 * to finalize PTI.
1463	 */
1464	pti_finalize();
1465
1466	system_state = SYSTEM_RUNNING;
1467	numa_default_policy();
1468
1469	rcu_end_inkernel_boot();
1470
1471	do_sysctl_args();
1472
1473	if (ramdisk_execute_command) {
1474		ret = run_init_process(ramdisk_execute_command);
1475		if (!ret)
1476			return 0;
1477		pr_err("Failed to execute %s (error %d)\n",
1478		       ramdisk_execute_command, ret);
1479	}
1480
1481	/*
1482	 * We try each of these until one succeeds.
1483	 *
1484	 * The Bourne shell can be used instead of init if we are
1485	 * trying to recover a really broken machine.
1486	 */
1487	if (execute_command) {
1488		ret = run_init_process(execute_command);
1489		if (!ret)
1490			return 0;
1491		panic("Requested init %s failed (error %d).",
1492		      execute_command, ret);
1493	}
1494
1495	if (CONFIG_DEFAULT_INIT[0] != '\0') {
1496		ret = run_init_process(CONFIG_DEFAULT_INIT);
1497		if (ret)
1498			pr_err("Default init %s failed (error %d)\n",
1499			       CONFIG_DEFAULT_INIT, ret);
1500		else
1501			return 0;
1502	}
1503
1504	if (!try_to_run_init_process("/sbin/init") ||
1505	    !try_to_run_init_process("/etc/init") ||
1506	    !try_to_run_init_process("/bin/init") ||
1507	    !try_to_run_init_process("/bin/sh"))
1508		return 0;
1509
1510	panic("No working init found.  Try passing init= option to kernel. "
1511	      "See Linux Documentation/admin-guide/init.rst for guidance.");
1512}
1513
1514/* Open /dev/console, for stdin/stdout/stderr, this should never fail */
1515void __init console_on_rootfs(void)
1516{
1517	struct file *file = filp_open("/dev/console", O_RDWR, 0);
1518
1519	if (IS_ERR(file)) {
1520		pr_err("Warning: unable to open an initial console.\n");
1521		return;
1522	}
1523	init_dup(file);
1524	init_dup(file);
1525	init_dup(file);
1526	fput(file);
1527}
1528
1529static noinline void __init kernel_init_freeable(void)
1530{
1531	/* Now the scheduler is fully set up and can do blocking allocations */
1532	gfp_allowed_mask = __GFP_BITS_MASK;
1533
1534	/*
1535	 * init can allocate pages on any node
1536	 */
1537	set_mems_allowed(node_states[N_MEMORY]);
1538
1539	cad_pid = get_pid(task_pid(current));
1540
1541	smp_prepare_cpus(setup_max_cpus);
1542
1543	workqueue_init();
1544
1545	init_mm_internals();
1546
1547	rcu_init_tasks_generic();
1548	do_pre_smp_initcalls();
1549	lockup_detector_init();
1550
1551	smp_init();
1552	sched_init_smp();
1553
1554	workqueue_init_topology();
1555	async_init();
1556	padata_init();
1557	page_alloc_init_late();
1558
1559	do_basic_setup();
1560
1561	kunit_run_all_tests();
1562
1563	wait_for_initramfs();
1564	console_on_rootfs();
1565
1566	/*
1567	 * check if there is an early userspace init.  If yes, let it do all
1568	 * the work
1569	 */
1570	if (init_eaccess(ramdisk_execute_command) != 0) {
1571		ramdisk_execute_command = NULL;
1572		prepare_namespace();
1573	}
1574
1575	/*
1576	 * Ok, we have completed the initial bootup, and
1577	 * we're essentially up and running. Get rid of the
1578	 * initmem segments and start the user-mode stuff..
1579	 *
1580	 * rootfs is available now, try loading the public keys
1581	 * and default modules
1582	 */
1583
1584	integrity_load_keys();
1585}
1586