Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  *  linux/init/main.c
0004  *
0005  *  Copyright (C) 1991, 1992  Linus Torvalds
0006  *
0007  *  GK 2/5/95  -  Changed to support mounting root fs via NFS
0008  *  Added initrd & change_root: Werner Almesberger & Hans Lermen, Feb '96
0009  *  Moan early if gcc is old, avoiding bogus kernels - Paul Gortmaker, May '96
0010  *  Simplified starting of init:  Michael A. Griffith <grif@acm.org>
0011  */
0012 
0013 #define DEBUG       /* Enable initcall_debug */
0014 
0015 #include <linux/types.h>
0016 #include <linux/extable.h>
0017 #include <linux/module.h>
0018 #include <linux/proc_fs.h>
0019 #include <linux/binfmts.h>
0020 #include <linux/kernel.h>
0021 #include <linux/syscalls.h>
0022 #include <linux/stackprotector.h>
0023 #include <linux/string.h>
0024 #include <linux/ctype.h>
0025 #include <linux/delay.h>
0026 #include <linux/ioport.h>
0027 #include <linux/init.h>
0028 #include <linux/initrd.h>
0029 #include <linux/memblock.h>
0030 #include <linux/acpi.h>
0031 #include <linux/bootconfig.h>
0032 #include <linux/console.h>
0033 #include <linux/nmi.h>
0034 #include <linux/percpu.h>
0035 #include <linux/kmod.h>
0036 #include <linux/kprobes.h>
0037 #include <linux/vmalloc.h>
0038 #include <linux/kernel_stat.h>
0039 #include <linux/start_kernel.h>
0040 #include <linux/security.h>
0041 #include <linux/smp.h>
0042 #include <linux/profile.h>
0043 #include <linux/kfence.h>
0044 #include <linux/rcupdate.h>
0045 #include <linux/srcu.h>
0046 #include <linux/moduleparam.h>
0047 #include <linux/kallsyms.h>
0048 #include <linux/buildid.h>
0049 #include <linux/writeback.h>
0050 #include <linux/cpu.h>
0051 #include <linux/cpuset.h>
0052 #include <linux/cgroup.h>
0053 #include <linux/efi.h>
0054 #include <linux/tick.h>
0055 #include <linux/sched/isolation.h>
0056 #include <linux/interrupt.h>
0057 #include <linux/taskstats_kern.h>
0058 #include <linux/delayacct.h>
0059 #include <linux/unistd.h>
0060 #include <linux/utsname.h>
0061 #include <linux/rmap.h>
0062 #include <linux/mempolicy.h>
0063 #include <linux/key.h>
0064 #include <linux/page_ext.h>
0065 #include <linux/debug_locks.h>
0066 #include <linux/debugobjects.h>
0067 #include <linux/lockdep.h>
0068 #include <linux/kmemleak.h>
0069 #include <linux/padata.h>
0070 #include <linux/pid_namespace.h>
0071 #include <linux/device/driver.h>
0072 #include <linux/kthread.h>
0073 #include <linux/sched.h>
0074 #include <linux/sched/init.h>
0075 #include <linux/signal.h>
0076 #include <linux/idr.h>
0077 #include <linux/kgdb.h>
0078 #include <linux/ftrace.h>
0079 #include <linux/async.h>
0080 #include <linux/shmem_fs.h>
0081 #include <linux/slab.h>
0082 #include <linux/perf_event.h>
0083 #include <linux/ptrace.h>
0084 #include <linux/pti.h>
0085 #include <linux/blkdev.h>
0086 #include <linux/sched/clock.h>
0087 #include <linux/sched/task.h>
0088 #include <linux/sched/task_stack.h>
0089 #include <linux/context_tracking.h>
0090 #include <linux/random.h>
0091 #include <linux/list.h>
0092 #include <linux/integrity.h>
0093 #include <linux/proc_ns.h>
0094 #include <linux/io.h>
0095 #include <linux/cache.h>
0096 #include <linux/rodata_test.h>
0097 #include <linux/jump_label.h>
0098 #include <linux/mem_encrypt.h>
0099 #include <linux/kcsan.h>
0100 #include <linux/init_syscalls.h>
0101 #include <linux/stackdepot.h>
0102 #include <linux/randomize_kstack.h>
0103 #include <net/net_namespace.h>
0104 
0105 #include <asm/io.h>
0106 #include <asm/bugs.h>
0107 #include <asm/setup.h>
0108 #include <asm/sections.h>
0109 #include <asm/cacheflush.h>
0110 
0111 #define CREATE_TRACE_POINTS
0112 #include <trace/events/initcall.h>
0113 
0114 #include <kunit/test.h>
0115 
0116 static int kernel_init(void *);
0117 
0118 extern void init_IRQ(void);
0119 extern void radix_tree_init(void);
0120 
0121 /*
0122  * Debug helper: via this flag we know that we are in 'early bootup code'
0123  * where only the boot processor is running with IRQ disabled.  This means
0124  * two things - IRQ must not be enabled before the flag is cleared and some
0125  * operations which are not allowed with IRQ disabled are allowed while the
0126  * flag is set.
0127  */
0128 bool early_boot_irqs_disabled __read_mostly;
0129 
0130 enum system_states system_state __read_mostly;
0131 EXPORT_SYMBOL(system_state);
0132 
0133 /*
0134  * Boot command-line arguments
0135  */
0136 #define MAX_INIT_ARGS CONFIG_INIT_ENV_ARG_LIMIT
0137 #define MAX_INIT_ENVS CONFIG_INIT_ENV_ARG_LIMIT
0138 
0139 extern void time_init(void);
0140 /* Default late time init is NULL. archs can override this later. */
0141 void (*__initdata late_time_init)(void);
0142 
0143 /* Untouched command line saved by arch-specific code. */
0144 char __initdata boot_command_line[COMMAND_LINE_SIZE];
0145 /* Untouched saved command line (eg. for /proc) */
0146 char *saved_command_line;
0147 /* Command line for parameter parsing */
0148 static char *static_command_line;
0149 /* Untouched extra command line */
0150 static char *extra_command_line;
0151 /* Extra init arguments */
0152 static char *extra_init_args;
0153 
0154 #ifdef CONFIG_BOOT_CONFIG
0155 /* Is bootconfig on command line? */
0156 static bool bootconfig_found;
0157 static size_t initargs_offs;
0158 #else
0159 # define bootconfig_found false
0160 # define initargs_offs 0
0161 #endif
0162 
0163 static char *execute_command;
0164 static char *ramdisk_execute_command = "/init";
0165 
0166 /*
0167  * Used to generate warnings if static_key manipulation functions are used
0168  * before jump_label_init is called.
0169  */
0170 bool static_key_initialized __read_mostly;
0171 EXPORT_SYMBOL_GPL(static_key_initialized);
0172 
0173 /*
0174  * If set, this is an indication to the drivers that reset the underlying
0175  * device before going ahead with the initialization otherwise driver might
0176  * rely on the BIOS and skip the reset operation.
0177  *
0178  * This is useful if kernel is booting in an unreliable environment.
0179  * For ex. kdump situation where previous kernel has crashed, BIOS has been
0180  * skipped and devices will be in unknown state.
0181  */
0182 unsigned int reset_devices;
0183 EXPORT_SYMBOL(reset_devices);
0184 
0185 static int __init set_reset_devices(char *str)
0186 {
0187     reset_devices = 1;
0188     return 1;
0189 }
0190 
0191 __setup("reset_devices", set_reset_devices);
0192 
0193 static const char *argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
0194 const char *envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };
0195 static const char *panic_later, *panic_param;
0196 
0197 extern const struct obs_kernel_param __setup_start[], __setup_end[];
0198 
0199 static bool __init obsolete_checksetup(char *line)
0200 {
0201     const struct obs_kernel_param *p;
0202     bool had_early_param = false;
0203 
0204     p = __setup_start;
0205     do {
0206         int n = strlen(p->str);
0207         if (parameqn(line, p->str, n)) {
0208             if (p->early) {
0209                 /* Already done in parse_early_param?
0210                  * (Needs exact match on param part).
0211                  * Keep iterating, as we can have early
0212                  * params and __setups of same names 8( */
0213                 if (line[n] == '\0' || line[n] == '=')
0214                     had_early_param = true;
0215             } else if (!p->setup_func) {
0216                 pr_warn("Parameter %s is obsolete, ignored\n",
0217                     p->str);
0218                 return true;
0219             } else if (p->setup_func(line + n))
0220                 return true;
0221         }
0222         p++;
0223     } while (p < __setup_end);
0224 
0225     return had_early_param;
0226 }
0227 
0228 /*
0229  * This should be approx 2 Bo*oMips to start (note initial shift), and will
0230  * still work even if initially too large, it will just take slightly longer
0231  */
0232 unsigned long loops_per_jiffy = (1<<12);
0233 EXPORT_SYMBOL(loops_per_jiffy);
0234 
0235 static int __init debug_kernel(char *str)
0236 {
0237     console_loglevel = CONSOLE_LOGLEVEL_DEBUG;
0238     return 0;
0239 }
0240 
0241 static int __init quiet_kernel(char *str)
0242 {
0243     console_loglevel = CONSOLE_LOGLEVEL_QUIET;
0244     return 0;
0245 }
0246 
0247 early_param("debug", debug_kernel);
0248 early_param("quiet", quiet_kernel);
0249 
0250 static int __init loglevel(char *str)
0251 {
0252     int newlevel;
0253 
0254     /*
0255      * Only update loglevel value when a correct setting was passed,
0256      * to prevent blind crashes (when loglevel being set to 0) that
0257      * are quite hard to debug
0258      */
0259     if (get_option(&str, &newlevel)) {
0260         console_loglevel = newlevel;
0261         return 0;
0262     }
0263 
0264     return -EINVAL;
0265 }
0266 
0267 early_param("loglevel", loglevel);
0268 
0269 #ifdef CONFIG_BLK_DEV_INITRD
0270 static void * __init get_boot_config_from_initrd(size_t *_size)
0271 {
0272     u32 size, csum;
0273     char *data;
0274     u32 *hdr;
0275     int i;
0276 
0277     if (!initrd_end)
0278         return NULL;
0279 
0280     data = (char *)initrd_end - BOOTCONFIG_MAGIC_LEN;
0281     /*
0282      * Since Grub may align the size of initrd to 4, we must
0283      * check the preceding 3 bytes as well.
0284      */
0285     for (i = 0; i < 4; i++) {
0286         if (!memcmp(data, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN))
0287             goto found;
0288         data--;
0289     }
0290     return NULL;
0291 
0292 found:
0293     hdr = (u32 *)(data - 8);
0294     size = le32_to_cpu(hdr[0]);
0295     csum = le32_to_cpu(hdr[1]);
0296 
0297     data = ((void *)hdr) - size;
0298     if ((unsigned long)data < initrd_start) {
0299         pr_err("bootconfig size %d is greater than initrd size %ld\n",
0300             size, initrd_end - initrd_start);
0301         return NULL;
0302     }
0303 
0304     if (xbc_calc_checksum(data, size) != csum) {
0305         pr_err("bootconfig checksum failed\n");
0306         return NULL;
0307     }
0308 
0309     /* Remove bootconfig from initramfs/initrd */
0310     initrd_end = (unsigned long)data;
0311     if (_size)
0312         *_size = size;
0313 
0314     return data;
0315 }
0316 #else
0317 static void * __init get_boot_config_from_initrd(size_t *_size)
0318 {
0319     return NULL;
0320 }
0321 #endif
0322 
0323 #ifdef CONFIG_BOOT_CONFIG
0324 
0325 static char xbc_namebuf[XBC_KEYLEN_MAX] __initdata;
0326 
0327 #define rest(dst, end) ((end) > (dst) ? (end) - (dst) : 0)
0328 
0329 static int __init xbc_snprint_cmdline(char *buf, size_t size,
0330                       struct xbc_node *root)
0331 {
0332     struct xbc_node *knode, *vnode;
0333     char *end = buf + size;
0334     const char *val;
0335     int ret;
0336 
0337     xbc_node_for_each_key_value(root, knode, val) {
0338         ret = xbc_node_compose_key_after(root, knode,
0339                     xbc_namebuf, XBC_KEYLEN_MAX);
0340         if (ret < 0)
0341             return ret;
0342 
0343         vnode = xbc_node_get_child(knode);
0344         if (!vnode) {
0345             ret = snprintf(buf, rest(buf, end), "%s ", xbc_namebuf);
0346             if (ret < 0)
0347                 return ret;
0348             buf += ret;
0349             continue;
0350         }
0351         xbc_array_for_each_value(vnode, val) {
0352             ret = snprintf(buf, rest(buf, end), "%s=\"%s\" ",
0353                        xbc_namebuf, val);
0354             if (ret < 0)
0355                 return ret;
0356             buf += ret;
0357         }
0358     }
0359 
0360     return buf - (end - size);
0361 }
0362 #undef rest
0363 
0364 /* Make an extra command line under given key word */
0365 static char * __init xbc_make_cmdline(const char *key)
0366 {
0367     struct xbc_node *root;
0368     char *new_cmdline;
0369     int ret, len = 0;
0370 
0371     root = xbc_find_node(key);
0372     if (!root)
0373         return NULL;
0374 
0375     /* Count required buffer size */
0376     len = xbc_snprint_cmdline(NULL, 0, root);
0377     if (len <= 0)
0378         return NULL;
0379 
0380     new_cmdline = memblock_alloc(len + 1, SMP_CACHE_BYTES);
0381     if (!new_cmdline) {
0382         pr_err("Failed to allocate memory for extra kernel cmdline.\n");
0383         return NULL;
0384     }
0385 
0386     ret = xbc_snprint_cmdline(new_cmdline, len + 1, root);
0387     if (ret < 0 || ret > len) {
0388         pr_err("Failed to print extra kernel cmdline.\n");
0389         memblock_free(new_cmdline, len + 1);
0390         return NULL;
0391     }
0392 
0393     return new_cmdline;
0394 }
0395 
0396 static int __init bootconfig_params(char *param, char *val,
0397                     const char *unused, void *arg)
0398 {
0399     if (strcmp(param, "bootconfig") == 0) {
0400         bootconfig_found = true;
0401     }
0402     return 0;
0403 }
0404 
0405 static int __init warn_bootconfig(char *str)
0406 {
0407     /* The 'bootconfig' has been handled by bootconfig_params(). */
0408     return 0;
0409 }
0410 
0411 static void __init setup_boot_config(void)
0412 {
0413     static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
0414     const char *msg, *data;
0415     int pos, ret;
0416     size_t size;
0417     char *err;
0418 
0419     /* Cut out the bootconfig data even if we have no bootconfig option */
0420     data = get_boot_config_from_initrd(&size);
0421     /* If there is no bootconfig in initrd, try embedded one. */
0422     if (!data)
0423         data = xbc_get_embedded_bootconfig(&size);
0424 
0425     strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
0426     err = parse_args("bootconfig", tmp_cmdline, NULL, 0, 0, 0, NULL,
0427              bootconfig_params);
0428 
0429     if (IS_ERR(err) || !bootconfig_found)
0430         return;
0431 
0432     /* parse_args() stops at the next param of '--' and returns an address */
0433     if (err)
0434         initargs_offs = err - tmp_cmdline;
0435 
0436     if (!data) {
0437         pr_err("'bootconfig' found on command line, but no bootconfig found\n");
0438         return;
0439     }
0440 
0441     if (size >= XBC_DATA_MAX) {
0442         pr_err("bootconfig size %ld greater than max size %d\n",
0443             (long)size, XBC_DATA_MAX);
0444         return;
0445     }
0446 
0447     ret = xbc_init(data, size, &msg, &pos);
0448     if (ret < 0) {
0449         if (pos < 0)
0450             pr_err("Failed to init bootconfig: %s.\n", msg);
0451         else
0452             pr_err("Failed to parse bootconfig: %s at %d.\n",
0453                 msg, pos);
0454     } else {
0455         xbc_get_info(&ret, NULL);
0456         pr_info("Load bootconfig: %ld bytes %d nodes\n", (long)size, ret);
0457         /* keys starting with "kernel." are passed via cmdline */
0458         extra_command_line = xbc_make_cmdline("kernel");
0459         /* Also, "init." keys are init arguments */
0460         extra_init_args = xbc_make_cmdline("init");
0461     }
0462     return;
0463 }
0464 
0465 static void __init exit_boot_config(void)
0466 {
0467     xbc_exit();
0468 }
0469 
0470 #else   /* !CONFIG_BOOT_CONFIG */
0471 
0472 static void __init setup_boot_config(void)
0473 {
0474     /* Remove bootconfig data from initrd */
0475     get_boot_config_from_initrd(NULL);
0476 }
0477 
0478 static int __init warn_bootconfig(char *str)
0479 {
0480     pr_warn("WARNING: 'bootconfig' found on the kernel command line but CONFIG_BOOT_CONFIG is not set.\n");
0481     return 0;
0482 }
0483 
0484 #define exit_boot_config()  do {} while (0)
0485 
0486 #endif  /* CONFIG_BOOT_CONFIG */
0487 
0488 early_param("bootconfig", warn_bootconfig);
0489 
0490 /* Change NUL term back to "=", to make "param" the whole string. */
0491 static void __init repair_env_string(char *param, char *val)
0492 {
0493     if (val) {
0494         /* param=val or param="val"? */
0495         if (val == param+strlen(param)+1)
0496             val[-1] = '=';
0497         else if (val == param+strlen(param)+2) {
0498             val[-2] = '=';
0499             memmove(val-1, val, strlen(val)+1);
0500         } else
0501             BUG();
0502     }
0503 }
0504 
0505 /* Anything after -- gets handed straight to init. */
0506 static int __init set_init_arg(char *param, char *val,
0507                    const char *unused, void *arg)
0508 {
0509     unsigned int i;
0510 
0511     if (panic_later)
0512         return 0;
0513 
0514     repair_env_string(param, val);
0515 
0516     for (i = 0; argv_init[i]; i++) {
0517         if (i == MAX_INIT_ARGS) {
0518             panic_later = "init";
0519             panic_param = param;
0520             return 0;
0521         }
0522     }
0523     argv_init[i] = param;
0524     return 0;
0525 }
0526 
0527 /*
0528  * Unknown boot options get handed to init, unless they look like
0529  * unused parameters (modprobe will find them in /proc/cmdline).
0530  */
0531 static int __init unknown_bootoption(char *param, char *val,
0532                      const char *unused, void *arg)
0533 {
0534     size_t len = strlen(param);
0535 
0536     repair_env_string(param, val);
0537 
0538     /* Handle obsolete-style parameters */
0539     if (obsolete_checksetup(param))
0540         return 0;
0541 
0542     /* Unused module parameter. */
0543     if (strnchr(param, len, '.'))
0544         return 0;
0545 
0546     if (panic_later)
0547         return 0;
0548 
0549     if (val) {
0550         /* Environment option */
0551         unsigned int i;
0552         for (i = 0; envp_init[i]; i++) {
0553             if (i == MAX_INIT_ENVS) {
0554                 panic_later = "env";
0555                 panic_param = param;
0556             }
0557             if (!strncmp(param, envp_init[i], len+1))
0558                 break;
0559         }
0560         envp_init[i] = param;
0561     } else {
0562         /* Command line option */
0563         unsigned int i;
0564         for (i = 0; argv_init[i]; i++) {
0565             if (i == MAX_INIT_ARGS) {
0566                 panic_later = "init";
0567                 panic_param = param;
0568             }
0569         }
0570         argv_init[i] = param;
0571     }
0572     return 0;
0573 }
0574 
0575 static int __init init_setup(char *str)
0576 {
0577     unsigned int i;
0578 
0579     execute_command = str;
0580     /*
0581      * In case LILO is going to boot us with default command line,
0582      * it prepends "auto" before the whole cmdline which makes
0583      * the shell think it should execute a script with such name.
0584      * So we ignore all arguments entered _before_ init=... [MJ]
0585      */
0586     for (i = 1; i < MAX_INIT_ARGS; i++)
0587         argv_init[i] = NULL;
0588     return 1;
0589 }
0590 __setup("init=", init_setup);
0591 
0592 static int __init rdinit_setup(char *str)
0593 {
0594     unsigned int i;
0595 
0596     ramdisk_execute_command = str;
0597     /* See "auto" comment in init_setup */
0598     for (i = 1; i < MAX_INIT_ARGS; i++)
0599         argv_init[i] = NULL;
0600     return 1;
0601 }
0602 __setup("rdinit=", rdinit_setup);
0603 
0604 #ifndef CONFIG_SMP
0605 static const unsigned int setup_max_cpus = NR_CPUS;
0606 static inline void setup_nr_cpu_ids(void) { }
0607 static inline void smp_prepare_cpus(unsigned int maxcpus) { }
0608 #endif
0609 
0610 /*
0611  * We need to store the untouched command line for future reference.
0612  * We also need to store the touched command line since the parameter
0613  * parsing is performed in place, and we should allow a component to
0614  * store reference of name/value for future reference.
0615  */
0616 static void __init setup_command_line(char *command_line)
0617 {
0618     size_t len, xlen = 0, ilen = 0;
0619 
0620     if (extra_command_line)
0621         xlen = strlen(extra_command_line);
0622     if (extra_init_args)
0623         ilen = strlen(extra_init_args) + 4; /* for " -- " */
0624 
0625     len = xlen + strlen(boot_command_line) + 1;
0626 
0627     saved_command_line = memblock_alloc(len + ilen, SMP_CACHE_BYTES);
0628     if (!saved_command_line)
0629         panic("%s: Failed to allocate %zu bytes\n", __func__, len + ilen);
0630 
0631     static_command_line = memblock_alloc(len, SMP_CACHE_BYTES);
0632     if (!static_command_line)
0633         panic("%s: Failed to allocate %zu bytes\n", __func__, len);
0634 
0635     if (xlen) {
0636         /*
0637          * We have to put extra_command_line before boot command
0638          * lines because there could be dashes (separator of init
0639          * command line) in the command lines.
0640          */
0641         strcpy(saved_command_line, extra_command_line);
0642         strcpy(static_command_line, extra_command_line);
0643     }
0644     strcpy(saved_command_line + xlen, boot_command_line);
0645     strcpy(static_command_line + xlen, command_line);
0646 
0647     if (ilen) {
0648         /*
0649          * Append supplemental init boot args to saved_command_line
0650          * so that user can check what command line options passed
0651          * to init.
0652          * The order should always be
0653          * " -- "[bootconfig init-param][cmdline init-param]
0654          */
0655         if (initargs_offs) {
0656             len = xlen + initargs_offs;
0657             strcpy(saved_command_line + len, extra_init_args);
0658             len += ilen - 4;    /* strlen(extra_init_args) */
0659             strcpy(saved_command_line + len,
0660                 boot_command_line + initargs_offs - 1);
0661         } else {
0662             len = strlen(saved_command_line);
0663             strcpy(saved_command_line + len, " -- ");
0664             len += 4;
0665             strcpy(saved_command_line + len, extra_init_args);
0666         }
0667     }
0668 }
0669 
0670 /*
0671  * We need to finalize in a non-__init function or else race conditions
0672  * between the root thread and the init thread may cause start_kernel to
0673  * be reaped by free_initmem before the root thread has proceeded to
0674  * cpu_idle.
0675  *
0676  * gcc-3.4 accidentally inlines this function, so use noinline.
0677  */
0678 
0679 static __initdata DECLARE_COMPLETION(kthreadd_done);
0680 
0681 noinline void __ref rest_init(void)
0682 {
0683     struct task_struct *tsk;
0684     int pid;
0685 
0686     rcu_scheduler_starting();
0687     /*
0688      * We need to spawn init first so that it obtains pid 1, however
0689      * the init task will end up wanting to create kthreads, which, if
0690      * we schedule it before we create kthreadd, will OOPS.
0691      */
0692     pid = user_mode_thread(kernel_init, NULL, CLONE_FS);
0693     /*
0694      * Pin init on the boot CPU. Task migration is not properly working
0695      * until sched_init_smp() has been run. It will set the allowed
0696      * CPUs for init to the non isolated CPUs.
0697      */
0698     rcu_read_lock();
0699     tsk = find_task_by_pid_ns(pid, &init_pid_ns);
0700     tsk->flags |= PF_NO_SETAFFINITY;
0701     set_cpus_allowed_ptr(tsk, cpumask_of(smp_processor_id()));
0702     rcu_read_unlock();
0703 
0704     numa_default_policy();
0705     pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
0706     rcu_read_lock();
0707     kthreadd_task = find_task_by_pid_ns(pid, &init_pid_ns);
0708     rcu_read_unlock();
0709 
0710     /*
0711      * Enable might_sleep() and smp_processor_id() checks.
0712      * They cannot be enabled earlier because with CONFIG_PREEMPTION=y
0713      * kernel_thread() would trigger might_sleep() splats. With
0714      * CONFIG_PREEMPT_VOLUNTARY=y the init task might have scheduled
0715      * already, but it's stuck on the kthreadd_done completion.
0716      */
0717     system_state = SYSTEM_SCHEDULING;
0718 
0719     complete(&kthreadd_done);
0720 
0721     /*
0722      * The boot idle thread must execute schedule()
0723      * at least once to get things moving:
0724      */
0725     schedule_preempt_disabled();
0726     /* Call into cpu_idle with preempt disabled */
0727     cpu_startup_entry(CPUHP_ONLINE);
0728 }
0729 
0730 /* Check for early params. */
0731 static int __init do_early_param(char *param, char *val,
0732                  const char *unused, void *arg)
0733 {
0734     const struct obs_kernel_param *p;
0735 
0736     for (p = __setup_start; p < __setup_end; p++) {
0737         if ((p->early && parameq(param, p->str)) ||
0738             (strcmp(param, "console") == 0 &&
0739              strcmp(p->str, "earlycon") == 0)
0740         ) {
0741             if (p->setup_func(val) != 0)
0742                 pr_warn("Malformed early option '%s'\n", param);
0743         }
0744     }
0745     /* We accept everything at this stage. */
0746     return 0;
0747 }
0748 
0749 void __init parse_early_options(char *cmdline)
0750 {
0751     parse_args("early options", cmdline, NULL, 0, 0, 0, NULL,
0752            do_early_param);
0753 }
0754 
0755 /* Arch code calls this early on, or if not, just before other parsing. */
0756 void __init parse_early_param(void)
0757 {
0758     static int done __initdata;
0759     static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
0760 
0761     if (done)
0762         return;
0763 
0764     /* All fall through to do_early_param. */
0765     strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
0766     parse_early_options(tmp_cmdline);
0767     done = 1;
0768 }
0769 
0770 void __init __weak arch_post_acpi_subsys_init(void) { }
0771 
0772 void __init __weak smp_setup_processor_id(void)
0773 {
0774 }
0775 
0776 # if THREAD_SIZE >= PAGE_SIZE
0777 void __init __weak thread_stack_cache_init(void)
0778 {
0779 }
0780 #endif
0781 
0782 void __init __weak mem_encrypt_init(void) { }
0783 
0784 void __init __weak poking_init(void) { }
0785 
0786 void __init __weak pgtable_cache_init(void) { }
0787 
0788 void __init __weak trap_init(void) { }
0789 
0790 bool initcall_debug;
0791 core_param(initcall_debug, initcall_debug, bool, 0644);
0792 
0793 #ifdef TRACEPOINTS_ENABLED
0794 static void __init initcall_debug_enable(void);
0795 #else
0796 static inline void initcall_debug_enable(void)
0797 {
0798 }
0799 #endif
0800 
0801 /* Report memory auto-initialization states for this boot. */
0802 static void __init report_meminit(void)
0803 {
0804     const char *stack;
0805 
0806     if (IS_ENABLED(CONFIG_INIT_STACK_ALL_PATTERN))
0807         stack = "all(pattern)";
0808     else if (IS_ENABLED(CONFIG_INIT_STACK_ALL_ZERO))
0809         stack = "all(zero)";
0810     else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL))
0811         stack = "byref_all(zero)";
0812     else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF))
0813         stack = "byref(zero)";
0814     else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_USER))
0815         stack = "__user(zero)";
0816     else
0817         stack = "off";
0818 
0819     pr_info("mem auto-init: stack:%s, heap alloc:%s, heap free:%s\n",
0820         stack, want_init_on_alloc(GFP_KERNEL) ? "on" : "off",
0821         want_init_on_free() ? "on" : "off");
0822     if (want_init_on_free())
0823         pr_info("mem auto-init: clearing system memory may take some time...\n");
0824 }
0825 
0826 /*
0827  * Set up kernel memory allocators
0828  */
0829 static void __init mm_init(void)
0830 {
0831     /*
0832      * page_ext requires contiguous pages,
0833      * bigger than MAX_ORDER unless SPARSEMEM.
0834      */
0835     page_ext_init_flatmem();
0836     init_mem_debugging_and_hardening();
0837     kfence_alloc_pool();
0838     report_meminit();
0839     stack_depot_early_init();
0840     mem_init();
0841     mem_init_print_info();
0842     kmem_cache_init();
0843     /*
0844      * page_owner must be initialized after buddy is ready, and also after
0845      * slab is ready so that stack_depot_init() works properly
0846      */
0847     page_ext_init_flatmem_late();
0848     kmemleak_init();
0849     pgtable_init();
0850     debug_objects_mem_init();
0851     vmalloc_init();
0852     /* Should be run before the first non-init thread is created */
0853     init_espfix_bsp();
0854     /* Should be run after espfix64 is set up. */
0855     pti_init();
0856 }
0857 
0858 #ifdef CONFIG_RANDOMIZE_KSTACK_OFFSET
0859 DEFINE_STATIC_KEY_MAYBE_RO(CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT,
0860                randomize_kstack_offset);
0861 DEFINE_PER_CPU(u32, kstack_offset);
0862 
0863 static int __init early_randomize_kstack_offset(char *buf)
0864 {
0865     int ret;
0866     bool bool_result;
0867 
0868     ret = kstrtobool(buf, &bool_result);
0869     if (ret)
0870         return ret;
0871 
0872     if (bool_result)
0873         static_branch_enable(&randomize_kstack_offset);
0874     else
0875         static_branch_disable(&randomize_kstack_offset);
0876     return 0;
0877 }
0878 early_param("randomize_kstack_offset", early_randomize_kstack_offset);
0879 #endif
0880 
0881 void __init __weak arch_call_rest_init(void)
0882 {
0883     rest_init();
0884 }
0885 
0886 static void __init print_unknown_bootoptions(void)
0887 {
0888     char *unknown_options;
0889     char *end;
0890     const char *const *p;
0891     size_t len;
0892 
0893     if (panic_later || (!argv_init[1] && !envp_init[2]))
0894         return;
0895 
0896     /*
0897      * Determine how many options we have to print out, plus a space
0898      * before each
0899      */
0900     len = 1; /* null terminator */
0901     for (p = &argv_init[1]; *p; p++) {
0902         len++;
0903         len += strlen(*p);
0904     }
0905     for (p = &envp_init[2]; *p; p++) {
0906         len++;
0907         len += strlen(*p);
0908     }
0909 
0910     unknown_options = memblock_alloc(len, SMP_CACHE_BYTES);
0911     if (!unknown_options) {
0912         pr_err("%s: Failed to allocate %zu bytes\n",
0913             __func__, len);
0914         return;
0915     }
0916     end = unknown_options;
0917 
0918     for (p = &argv_init[1]; *p; p++)
0919         end += sprintf(end, " %s", *p);
0920     for (p = &envp_init[2]; *p; p++)
0921         end += sprintf(end, " %s", *p);
0922 
0923     /* Start at unknown_options[1] to skip the initial space */
0924     pr_notice("Unknown kernel command line parameters \"%s\", will be passed to user space.\n",
0925         &unknown_options[1]);
0926     memblock_free(unknown_options, len);
0927 }
0928 
0929 asmlinkage __visible void __init __no_sanitize_address start_kernel(void)
0930 {
0931     char *command_line;
0932     char *after_dashes;
0933 
0934     set_task_stack_end_magic(&init_task);
0935     smp_setup_processor_id();
0936     debug_objects_early_init();
0937     init_vmlinux_build_id();
0938 
0939     cgroup_init_early();
0940 
0941     local_irq_disable();
0942     early_boot_irqs_disabled = true;
0943 
0944     /*
0945      * Interrupts are still disabled. Do necessary setups, then
0946      * enable them.
0947      */
0948     boot_cpu_init();
0949     page_address_init();
0950     pr_notice("%s", linux_banner);
0951     early_security_init();
0952     setup_arch(&command_line);
0953     setup_boot_config();
0954     setup_command_line(command_line);
0955     setup_nr_cpu_ids();
0956     setup_per_cpu_areas();
0957     smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */
0958     boot_cpu_hotplug_init();
0959 
0960     build_all_zonelists(NULL);
0961     page_alloc_init();
0962 
0963     pr_notice("Kernel command line: %s\n", saved_command_line);
0964     /* parameters may set static keys */
0965     jump_label_init();
0966     parse_early_param();
0967     after_dashes = parse_args("Booting kernel",
0968                   static_command_line, __start___param,
0969                   __stop___param - __start___param,
0970                   -1, -1, NULL, &unknown_bootoption);
0971     print_unknown_bootoptions();
0972     if (!IS_ERR_OR_NULL(after_dashes))
0973         parse_args("Setting init args", after_dashes, NULL, 0, -1, -1,
0974                NULL, set_init_arg);
0975     if (extra_init_args)
0976         parse_args("Setting extra init args", extra_init_args,
0977                NULL, 0, -1, -1, NULL, set_init_arg);
0978 
0979     /*
0980      * These use large bootmem allocations and must precede
0981      * kmem_cache_init()
0982      */
0983     setup_log_buf(0);
0984     vfs_caches_init_early();
0985     sort_main_extable();
0986     trap_init();
0987     mm_init();
0988 
0989     ftrace_init();
0990 
0991     /* trace_printk can be enabled here */
0992     early_trace_init();
0993 
0994     /*
0995      * Set up the scheduler prior starting any interrupts (such as the
0996      * timer interrupt). Full topology setup happens at smp_init()
0997      * time - but meanwhile we still have a functioning scheduler.
0998      */
0999     sched_init();
1000 
1001     if (WARN(!irqs_disabled(),
1002          "Interrupts were enabled *very* early, fixing it\n"))
1003         local_irq_disable();
1004     radix_tree_init();
1005 
1006     /*
1007      * Set up housekeeping before setting up workqueues to allow the unbound
1008      * workqueue to take non-housekeeping into account.
1009      */
1010     housekeeping_init();
1011 
1012     /*
1013      * Allow workqueue creation and work item queueing/cancelling
1014      * early.  Work item execution depends on kthreads and starts after
1015      * workqueue_init().
1016      */
1017     workqueue_init_early();
1018 
1019     rcu_init();
1020 
1021     /* Trace events are available after this */
1022     trace_init();
1023 
1024     if (initcall_debug)
1025         initcall_debug_enable();
1026 
1027     context_tracking_init();
1028     /* init some links before init_ISA_irqs() */
1029     early_irq_init();
1030     init_IRQ();
1031     tick_init();
1032     rcu_init_nohz();
1033     init_timers();
1034     srcu_init();
1035     hrtimers_init();
1036     softirq_init();
1037     timekeeping_init();
1038     kfence_init();
1039     time_init();
1040 
1041     /*
1042      * For best initial stack canary entropy, prepare it after:
1043      * - setup_arch() for any UEFI RNG entropy and boot cmdline access
1044      * - timekeeping_init() for ktime entropy used in random_init()
1045      * - time_init() for making random_get_entropy() work on some platforms
1046      * - random_init() to initialize the RNG from from early entropy sources
1047      */
1048     random_init(command_line);
1049     boot_init_stack_canary();
1050 
1051     perf_event_init();
1052     profile_init();
1053     call_function_init();
1054     WARN(!irqs_disabled(), "Interrupts were enabled early\n");
1055 
1056     early_boot_irqs_disabled = false;
1057     local_irq_enable();
1058 
1059     kmem_cache_init_late();
1060 
1061     /*
1062      * HACK ALERT! This is early. We're enabling the console before
1063      * we've done PCI setups etc, and console_init() must be aware of
1064      * this. But we do want output early, in case something goes wrong.
1065      */
1066     console_init();
1067     if (panic_later)
1068         panic("Too many boot %s vars at `%s'", panic_later,
1069               panic_param);
1070 
1071     lockdep_init();
1072 
1073     /*
1074      * Need to run this when irqs are enabled, because it wants
1075      * to self-test [hard/soft]-irqs on/off lock inversion bugs
1076      * too:
1077      */
1078     locking_selftest();
1079 
1080     /*
1081      * This needs to be called before any devices perform DMA
1082      * operations that might use the SWIOTLB bounce buffers. It will
1083      * mark the bounce buffers as decrypted so that their usage will
1084      * not cause "plain-text" data to be decrypted when accessed.
1085      */
1086     mem_encrypt_init();
1087 
1088 #ifdef CONFIG_BLK_DEV_INITRD
1089     if (initrd_start && !initrd_below_start_ok &&
1090         page_to_pfn(virt_to_page((void *)initrd_start)) < min_low_pfn) {
1091         pr_crit("initrd overwritten (0x%08lx < 0x%08lx) - disabling it.\n",
1092             page_to_pfn(virt_to_page((void *)initrd_start)),
1093             min_low_pfn);
1094         initrd_start = 0;
1095     }
1096 #endif
1097     setup_per_cpu_pageset();
1098     numa_policy_init();
1099     acpi_early_init();
1100     if (late_time_init)
1101         late_time_init();
1102     sched_clock_init();
1103     calibrate_delay();
1104     pid_idr_init();
1105     anon_vma_init();
1106 #ifdef CONFIG_X86
1107     if (efi_enabled(EFI_RUNTIME_SERVICES))
1108         efi_enter_virtual_mode();
1109 #endif
1110     thread_stack_cache_init();
1111     cred_init();
1112     fork_init();
1113     proc_caches_init();
1114     uts_ns_init();
1115     key_init();
1116     security_init();
1117     dbg_late_init();
1118     net_ns_init();
1119     vfs_caches_init();
1120     pagecache_init();
1121     signals_init();
1122     seq_file_init();
1123     proc_root_init();
1124     nsfs_init();
1125     cpuset_init();
1126     cgroup_init();
1127     taskstats_init_early();
1128     delayacct_init();
1129 
1130     poking_init();
1131     check_bugs();
1132 
1133     acpi_subsystem_init();
1134     arch_post_acpi_subsys_init();
1135     kcsan_init();
1136 
1137     /* Do the rest non-__init'ed, we're now alive */
1138     arch_call_rest_init();
1139 
1140     prevent_tail_call_optimization();
1141 }
1142 
1143 /* Call all constructor functions linked into the kernel. */
1144 static void __init do_ctors(void)
1145 {
1146 /*
1147  * For UML, the constructors have already been called by the
1148  * normal setup code as it's just a normal ELF binary, so we
1149  * cannot do it again - but we do need CONFIG_CONSTRUCTORS
1150  * even on UML for modules.
1151  */
1152 #if defined(CONFIG_CONSTRUCTORS) && !defined(CONFIG_UML)
1153     ctor_fn_t *fn = (ctor_fn_t *) __ctors_start;
1154 
1155     for (; fn < (ctor_fn_t *) __ctors_end; fn++)
1156         (*fn)();
1157 #endif
1158 }
1159 
1160 #ifdef CONFIG_KALLSYMS
1161 struct blacklist_entry {
1162     struct list_head next;
1163     char *buf;
1164 };
1165 
1166 static __initdata_or_module LIST_HEAD(blacklisted_initcalls);
1167 
1168 static int __init initcall_blacklist(char *str)
1169 {
1170     char *str_entry;
1171     struct blacklist_entry *entry;
1172 
1173     /* str argument is a comma-separated list of functions */
1174     do {
1175         str_entry = strsep(&str, ",");
1176         if (str_entry) {
1177             pr_debug("blacklisting initcall %s\n", str_entry);
1178             entry = memblock_alloc(sizeof(*entry),
1179                            SMP_CACHE_BYTES);
1180             if (!entry)
1181                 panic("%s: Failed to allocate %zu bytes\n",
1182                       __func__, sizeof(*entry));
1183             entry->buf = memblock_alloc(strlen(str_entry) + 1,
1184                             SMP_CACHE_BYTES);
1185             if (!entry->buf)
1186                 panic("%s: Failed to allocate %zu bytes\n",
1187                       __func__, strlen(str_entry) + 1);
1188             strcpy(entry->buf, str_entry);
1189             list_add(&entry->next, &blacklisted_initcalls);
1190         }
1191     } while (str_entry);
1192 
1193     return 1;
1194 }
1195 
1196 static bool __init_or_module initcall_blacklisted(initcall_t fn)
1197 {
1198     struct blacklist_entry *entry;
1199     char fn_name[KSYM_SYMBOL_LEN];
1200     unsigned long addr;
1201 
1202     if (list_empty(&blacklisted_initcalls))
1203         return false;
1204 
1205     addr = (unsigned long) dereference_function_descriptor(fn);
1206     sprint_symbol_no_offset(fn_name, addr);
1207 
1208     /*
1209      * fn will be "function_name [module_name]" where [module_name] is not
1210      * displayed for built-in init functions.  Strip off the [module_name].
1211      */
1212     strreplace(fn_name, ' ', '\0');
1213 
1214     list_for_each_entry(entry, &blacklisted_initcalls, next) {
1215         if (!strcmp(fn_name, entry->buf)) {
1216             pr_debug("initcall %s blacklisted\n", fn_name);
1217             return true;
1218         }
1219     }
1220 
1221     return false;
1222 }
1223 #else
1224 static int __init initcall_blacklist(char *str)
1225 {
1226     pr_warn("initcall_blacklist requires CONFIG_KALLSYMS\n");
1227     return 0;
1228 }
1229 
1230 static bool __init_or_module initcall_blacklisted(initcall_t fn)
1231 {
1232     return false;
1233 }
1234 #endif
1235 __setup("initcall_blacklist=", initcall_blacklist);
1236 
1237 static __init_or_module void
1238 trace_initcall_start_cb(void *data, initcall_t fn)
1239 {
1240     ktime_t *calltime = (ktime_t *)data;
1241 
1242     printk(KERN_DEBUG "calling  %pS @ %i\n", fn, task_pid_nr(current));
1243     *calltime = ktime_get();
1244 }
1245 
1246 static __init_or_module void
1247 trace_initcall_finish_cb(void *data, initcall_t fn, int ret)
1248 {
1249     ktime_t rettime, *calltime = (ktime_t *)data;
1250 
1251     rettime = ktime_get();
1252     printk(KERN_DEBUG "initcall %pS returned %d after %lld usecs\n",
1253          fn, ret, (unsigned long long)ktime_us_delta(rettime, *calltime));
1254 }
1255 
1256 static ktime_t initcall_calltime;
1257 
1258 #ifdef TRACEPOINTS_ENABLED
1259 static void __init initcall_debug_enable(void)
1260 {
1261     int ret;
1262 
1263     ret = register_trace_initcall_start(trace_initcall_start_cb,
1264                         &initcall_calltime);
1265     ret |= register_trace_initcall_finish(trace_initcall_finish_cb,
1266                           &initcall_calltime);
1267     WARN(ret, "Failed to register initcall tracepoints\n");
1268 }
1269 # define do_trace_initcall_start    trace_initcall_start
1270 # define do_trace_initcall_finish   trace_initcall_finish
1271 #else
1272 static inline void do_trace_initcall_start(initcall_t fn)
1273 {
1274     if (!initcall_debug)
1275         return;
1276     trace_initcall_start_cb(&initcall_calltime, fn);
1277 }
1278 static inline void do_trace_initcall_finish(initcall_t fn, int ret)
1279 {
1280     if (!initcall_debug)
1281         return;
1282     trace_initcall_finish_cb(&initcall_calltime, fn, ret);
1283 }
1284 #endif /* !TRACEPOINTS_ENABLED */
1285 
1286 int __init_or_module do_one_initcall(initcall_t fn)
1287 {
1288     int count = preempt_count();
1289     char msgbuf[64];
1290     int ret;
1291 
1292     if (initcall_blacklisted(fn))
1293         return -EPERM;
1294 
1295     do_trace_initcall_start(fn);
1296     ret = fn();
1297     do_trace_initcall_finish(fn, ret);
1298 
1299     msgbuf[0] = 0;
1300 
1301     if (preempt_count() != count) {
1302         sprintf(msgbuf, "preemption imbalance ");
1303         preempt_count_set(count);
1304     }
1305     if (irqs_disabled()) {
1306         strlcat(msgbuf, "disabled interrupts ", sizeof(msgbuf));
1307         local_irq_enable();
1308     }
1309     WARN(msgbuf[0], "initcall %pS returned with %s\n", fn, msgbuf);
1310 
1311     add_latent_entropy();
1312     return ret;
1313 }
1314 
1315 
1316 extern initcall_entry_t __initcall_start[];
1317 extern initcall_entry_t __initcall0_start[];
1318 extern initcall_entry_t __initcall1_start[];
1319 extern initcall_entry_t __initcall2_start[];
1320 extern initcall_entry_t __initcall3_start[];
1321 extern initcall_entry_t __initcall4_start[];
1322 extern initcall_entry_t __initcall5_start[];
1323 extern initcall_entry_t __initcall6_start[];
1324 extern initcall_entry_t __initcall7_start[];
1325 extern initcall_entry_t __initcall_end[];
1326 
1327 static initcall_entry_t *initcall_levels[] __initdata = {
1328     __initcall0_start,
1329     __initcall1_start,
1330     __initcall2_start,
1331     __initcall3_start,
1332     __initcall4_start,
1333     __initcall5_start,
1334     __initcall6_start,
1335     __initcall7_start,
1336     __initcall_end,
1337 };
1338 
1339 /* Keep these in sync with initcalls in include/linux/init.h */
1340 static const char *initcall_level_names[] __initdata = {
1341     "pure",
1342     "core",
1343     "postcore",
1344     "arch",
1345     "subsys",
1346     "fs",
1347     "device",
1348     "late",
1349 };
1350 
1351 static int __init ignore_unknown_bootoption(char *param, char *val,
1352                    const char *unused, void *arg)
1353 {
1354     return 0;
1355 }
1356 
1357 static void __init do_initcall_level(int level, char *command_line)
1358 {
1359     initcall_entry_t *fn;
1360 
1361     parse_args(initcall_level_names[level],
1362            command_line, __start___param,
1363            __stop___param - __start___param,
1364            level, level,
1365            NULL, ignore_unknown_bootoption);
1366 
1367     trace_initcall_level(initcall_level_names[level]);
1368     for (fn = initcall_levels[level]; fn < initcall_levels[level+1]; fn++)
1369         do_one_initcall(initcall_from_entry(fn));
1370 }
1371 
1372 static void __init do_initcalls(void)
1373 {
1374     int level;
1375     size_t len = strlen(saved_command_line) + 1;
1376     char *command_line;
1377 
1378     command_line = kzalloc(len, GFP_KERNEL);
1379     if (!command_line)
1380         panic("%s: Failed to allocate %zu bytes\n", __func__, len);
1381 
1382     for (level = 0; level < ARRAY_SIZE(initcall_levels) - 1; level++) {
1383         /* Parser modifies command_line, restore it each time */
1384         strcpy(command_line, saved_command_line);
1385         do_initcall_level(level, command_line);
1386     }
1387 
1388     kfree(command_line);
1389 }
1390 
1391 /*
1392  * Ok, the machine is now initialized. None of the devices
1393  * have been touched yet, but the CPU subsystem is up and
1394  * running, and memory and process management works.
1395  *
1396  * Now we can finally start doing some real work..
1397  */
1398 static void __init do_basic_setup(void)
1399 {
1400     cpuset_init_smp();
1401     driver_init();
1402     init_irq_proc();
1403     do_ctors();
1404     do_initcalls();
1405 }
1406 
1407 static void __init do_pre_smp_initcalls(void)
1408 {
1409     initcall_entry_t *fn;
1410 
1411     trace_initcall_level("early");
1412     for (fn = __initcall_start; fn < __initcall0_start; fn++)
1413         do_one_initcall(initcall_from_entry(fn));
1414 }
1415 
1416 static int run_init_process(const char *init_filename)
1417 {
1418     const char *const *p;
1419 
1420     argv_init[0] = init_filename;
1421     pr_info("Run %s as init process\n", init_filename);
1422     pr_debug("  with arguments:\n");
1423     for (p = argv_init; *p; p++)
1424         pr_debug("    %s\n", *p);
1425     pr_debug("  with environment:\n");
1426     for (p = envp_init; *p; p++)
1427         pr_debug("    %s\n", *p);
1428     return kernel_execve(init_filename, argv_init, envp_init);
1429 }
1430 
1431 static int try_to_run_init_process(const char *init_filename)
1432 {
1433     int ret;
1434 
1435     ret = run_init_process(init_filename);
1436 
1437     if (ret && ret != -ENOENT) {
1438         pr_err("Starting init: %s exists but couldn't execute it (error %d)\n",
1439                init_filename, ret);
1440     }
1441 
1442     return ret;
1443 }
1444 
1445 static noinline void __init kernel_init_freeable(void);
1446 
1447 #if defined(CONFIG_STRICT_KERNEL_RWX) || defined(CONFIG_STRICT_MODULE_RWX)
1448 bool rodata_enabled __ro_after_init = true;
1449 
1450 #ifndef arch_parse_debug_rodata
1451 static inline bool arch_parse_debug_rodata(char *str) { return false; }
1452 #endif
1453 
1454 static int __init set_debug_rodata(char *str)
1455 {
1456     if (arch_parse_debug_rodata(str))
1457         return 0;
1458 
1459     if (str && !strcmp(str, "on"))
1460         rodata_enabled = true;
1461     else if (str && !strcmp(str, "off"))
1462         rodata_enabled = false;
1463     else
1464         pr_warn("Invalid option string for rodata: '%s'\n", str);
1465     return 0;
1466 }
1467 early_param("rodata", set_debug_rodata);
1468 #endif
1469 
1470 #ifdef CONFIG_STRICT_KERNEL_RWX
1471 static void mark_readonly(void)
1472 {
1473     if (rodata_enabled) {
1474         /*
1475          * load_module() results in W+X mappings, which are cleaned
1476          * up with call_rcu().  Let's make sure that queued work is
1477          * flushed so that we don't hit false positives looking for
1478          * insecure pages which are W+X.
1479          */
1480         rcu_barrier();
1481         mark_rodata_ro();
1482         rodata_test();
1483     } else
1484         pr_info("Kernel memory protection disabled.\n");
1485 }
1486 #elif defined(CONFIG_ARCH_HAS_STRICT_KERNEL_RWX)
1487 static inline void mark_readonly(void)
1488 {
1489     pr_warn("Kernel memory protection not selected by kernel config.\n");
1490 }
1491 #else
1492 static inline void mark_readonly(void)
1493 {
1494     pr_warn("This architecture does not have kernel memory protection.\n");
1495 }
1496 #endif
1497 
1498 void __weak free_initmem(void)
1499 {
1500     free_initmem_default(POISON_FREE_INITMEM);
1501 }
1502 
1503 static int __ref kernel_init(void *unused)
1504 {
1505     int ret;
1506 
1507     /*
1508      * Wait until kthreadd is all set-up.
1509      */
1510     wait_for_completion(&kthreadd_done);
1511 
1512     kernel_init_freeable();
1513     /* need to finish all async __init code before freeing the memory */
1514     async_synchronize_full();
1515 
1516     system_state = SYSTEM_FREEING_INITMEM;
1517     kprobe_free_init_mem();
1518     ftrace_free_init_mem();
1519     kgdb_free_init_mem();
1520     exit_boot_config();
1521     free_initmem();
1522     mark_readonly();
1523 
1524     /*
1525      * Kernel mappings are now finalized - update the userspace page-table
1526      * to finalize PTI.
1527      */
1528     pti_finalize();
1529 
1530     system_state = SYSTEM_RUNNING;
1531     numa_default_policy();
1532 
1533     rcu_end_inkernel_boot();
1534 
1535     do_sysctl_args();
1536 
1537     if (ramdisk_execute_command) {
1538         ret = run_init_process(ramdisk_execute_command);
1539         if (!ret)
1540             return 0;
1541         pr_err("Failed to execute %s (error %d)\n",
1542                ramdisk_execute_command, ret);
1543     }
1544 
1545     /*
1546      * We try each of these until one succeeds.
1547      *
1548      * The Bourne shell can be used instead of init if we are
1549      * trying to recover a really broken machine.
1550      */
1551     if (execute_command) {
1552         ret = run_init_process(execute_command);
1553         if (!ret)
1554             return 0;
1555         panic("Requested init %s failed (error %d).",
1556               execute_command, ret);
1557     }
1558 
1559     if (CONFIG_DEFAULT_INIT[0] != '\0') {
1560         ret = run_init_process(CONFIG_DEFAULT_INIT);
1561         if (ret)
1562             pr_err("Default init %s failed (error %d)\n",
1563                    CONFIG_DEFAULT_INIT, ret);
1564         else
1565             return 0;
1566     }
1567 
1568     if (!try_to_run_init_process("/sbin/init") ||
1569         !try_to_run_init_process("/etc/init") ||
1570         !try_to_run_init_process("/bin/init") ||
1571         !try_to_run_init_process("/bin/sh"))
1572         return 0;
1573 
1574     panic("No working init found.  Try passing init= option to kernel. "
1575           "See Linux Documentation/admin-guide/init.rst for guidance.");
1576 }
1577 
1578 /* Open /dev/console, for stdin/stdout/stderr, this should never fail */
1579 void __init console_on_rootfs(void)
1580 {
1581     struct file *file = filp_open("/dev/console", O_RDWR, 0);
1582 
1583     if (IS_ERR(file)) {
1584         pr_err("Warning: unable to open an initial console.\n");
1585         return;
1586     }
1587     init_dup(file);
1588     init_dup(file);
1589     init_dup(file);
1590     fput(file);
1591 }
1592 
1593 static noinline void __init kernel_init_freeable(void)
1594 {
1595     /* Now the scheduler is fully set up and can do blocking allocations */
1596     gfp_allowed_mask = __GFP_BITS_MASK;
1597 
1598     /*
1599      * init can allocate pages on any node
1600      */
1601     set_mems_allowed(node_states[N_MEMORY]);
1602 
1603     cad_pid = get_pid(task_pid(current));
1604 
1605     smp_prepare_cpus(setup_max_cpus);
1606 
1607     workqueue_init();
1608 
1609     init_mm_internals();
1610 
1611     rcu_init_tasks_generic();
1612     do_pre_smp_initcalls();
1613     lockup_detector_init();
1614 
1615     smp_init();
1616     sched_init_smp();
1617 
1618     padata_init();
1619     page_alloc_init_late();
1620     /* Initialize page ext after all struct pages are initialized. */
1621     page_ext_init();
1622 
1623     do_basic_setup();
1624 
1625     kunit_run_all_tests();
1626 
1627     wait_for_initramfs();
1628     console_on_rootfs();
1629 
1630     /*
1631      * check if there is an early userspace init.  If yes, let it do all
1632      * the work
1633      */
1634     if (init_eaccess(ramdisk_execute_command) != 0) {
1635         ramdisk_execute_command = NULL;
1636         prepare_namespace();
1637     }
1638 
1639     /*
1640      * Ok, we have completed the initial bootup, and
1641      * we're essentially up and running. Get rid of the
1642      * initmem segments and start the user-mode stuff..
1643      *
1644      * rootfs is available now, try loading the public keys
1645      * and default modules
1646      */
1647 
1648     integrity_load_keys();
1649 }