Merge tag 'mtd/for-5.9' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux
[linux-2.6-microblaze.git] / init / main.c
index 92d2579..ae78fb6 100644 (file)
@@ -96,6 +96,7 @@
 #include <linux/jump_label.h>
 #include <linux/mem_encrypt.h>
 #include <linux/kcsan.h>
+#include <linux/init_syscalls.h>
 
 #include <asm/io.h>
 #include <asm/bugs.h>
@@ -154,7 +155,7 @@ static bool initargs_found;
 #endif
 
 static char *execute_command;
-static char *ramdisk_execute_command;
+static char *ramdisk_execute_command = "/init";
 
 /*
  * Used to generate warnings if static_key manipulation functions are used
@@ -387,8 +388,6 @@ static int __init bootconfig_params(char *param, char *val,
 {
        if (strcmp(param, "bootconfig") == 0) {
                bootconfig_found = true;
-       } else if (strcmp(param, "--") == 0) {
-               initargs_found = true;
        }
        return 0;
 }
@@ -399,19 +398,23 @@ static void __init setup_boot_config(const char *cmdline)
        const char *msg;
        int pos;
        u32 size, csum;
-       char *data, *copy;
+       char *data, *copy, *err;
        int ret;
 
        /* Cut out the bootconfig data even if we have no bootconfig option */
        data = get_boot_config_from_initrd(&size, &csum);
 
        strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
-       parse_args("bootconfig", tmp_cmdline, NULL, 0, 0, 0, NULL,
-                  bootconfig_params);
+       err = parse_args("bootconfig", tmp_cmdline, NULL, 0, 0, 0, NULL,
+                        bootconfig_params);
 
-       if (!bootconfig_found)
+       if (IS_ERR(err) || !bootconfig_found)
                return;
 
+       /* parse_args() stops at '--' and returns an address */
+       if (err)
+               initargs_found = true;
+
        if (!data) {
                pr_err("'bootconfig' found on command line, but no bootconfig found\n");
                return;
@@ -1457,15 +1460,19 @@ static int __ref kernel_init(void *unused)
              "See Linux Documentation/admin-guide/init.rst for guidance.");
 }
 
-void console_on_rootfs(void)
+/* Open /dev/console, for stdin/stdout/stderr, this should never fail */
+void __init console_on_rootfs(void)
 {
-       /* Open the /dev/console as stdin, this should never fail */
-       if (ksys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
-               pr_err("Warning: unable to open an initial console.\n");
+       struct file *file = filp_open("/dev/console", O_RDWR, 0);
 
-       /* create stdout/stderr */
-       (void) ksys_dup(0);
-       (void) ksys_dup(0);
+       if (IS_ERR(file)) {
+               pr_err("Warning: unable to open an initial console.\n");
+               return;
+       }
+       init_dup(file);
+       init_dup(file);
+       init_dup(file);
+       fput(file);
 }
 
 static noinline void __init kernel_init_freeable(void)
@@ -1510,12 +1517,7 @@ static noinline void __init kernel_init_freeable(void)
         * check if there is an early userspace init.  If yes, let it do all
         * the work
         */
-
-       if (!ramdisk_execute_command)
-               ramdisk_execute_command = "/init";
-
-       if (ksys_access((const char __user *)
-                       ramdisk_execute_command, 0) != 0) {
+       if (init_eaccess(ramdisk_execute_command) != 0) {
                ramdisk_execute_command = NULL;
                prepare_namespace();
        }