This patch adds an option to disables the kernel's capability of mounting a
root device other than the ramfs. If you use initramfs, you don't need to
have this legacy feature anymore.

Signed-Off-By: Bodo Eggert <[EMAIL PROTECTED]>


diff -X dontdiff -pruN linux-2.6.22.base/init/do_mounts.c 
linux-2.6.22.tmpfsroot/init/do_mounts.c
--- linux-2.6.22.base/init/do_mounts.c  2007-07-12 23:30:39.000000000 +0200
+++ linux-2.6.22.tmpfsroot/init/do_mounts.c     2007-07-12 23:07:50.000000000 
+0200
@@ -18,11 +18,46 @@
 
 #include "do_mounts.h"
 
+int __initdata rd_doload;   /* 1 = load RAM disk, 0 = don't load */
+
+dev_t ROOT_DEV;
+int root_mountflags = MS_RDONLY | MS_SILENT;
+
+#if defined(CONFIG_BLK_DEV_RAM) || defined(CONFIG_BLK_DEV_FD)
+void __init change_floppy(char *fmt, ...)
+{
+       struct termios termios;
+       char buf[80];
+       char c;
+       int fd;
+       va_list args;
+       va_start(args, fmt);
+       vsprintf(buf, fmt, args);
+       va_end(args);
+       fd = sys_open("/dev/root", O_RDWR | O_NDELAY, 0);
+       if (fd >= 0) {
+               sys_ioctl(fd, FDEJECT, 0);
+               sys_close(fd);
+       }
+       printk(KERN_NOTICE "VFS: Insert %s and press ENTER\n", buf);
+       fd = sys_open("/dev/console", O_RDWR, 0);
+       if (fd >= 0) {
+               sys_ioctl(fd, TCGETS, (long)&termios);
+               termios.c_lflag &= ~ICANON;
+               sys_ioctl(fd, TCSETSF, (long)&termios);
+               sys_read(fd, &c, 1);
+               termios.c_lflag |= ICANON;
+               sys_ioctl(fd, TCSETSF, (long)&termios);
+               sys_close(fd);
+       }
+}
+#endif
+
+#ifndef CONFIG_DISABLE_MOUNT_ON_BOOT
+
 extern int get_filesystem_list(char * buf);
 
-int __initdata rd_doload;      /* 1 = load RAM disk, 0 = don't load */
 
-int root_mountflags = MS_RDONLY | MS_SILENT;
 char * __initdata root_device_name;
 #ifdef CONFIG_TMPFS_ROOT
 static char __initdata saved_root_name[64] = "rootfs";
@@ -30,8 +65,6 @@ static char __initdata saved_root_name[6
 static char __initdata saved_root_name[64];
 #endif
 
-dev_t ROOT_DEV;
-
 static int __init load_ramdisk(char *str)
 {
        rd_doload = simple_strtol(str,NULL,0) & 3;
@@ -353,36 +386,6 @@ static int __init mount_nfs_root(void)
 }
 #endif
 
-#if defined(CONFIG_BLK_DEV_RAM) || defined(CONFIG_BLK_DEV_FD)
-void __init change_floppy(char *fmt, ...)
-{
-       struct termios termios;
-       char buf[80];
-       char c;
-       int fd;
-       va_list args;
-       va_start(args, fmt);
-       vsprintf(buf, fmt, args);
-       va_end(args);
-       fd = sys_open("/dev/root", O_RDWR | O_NDELAY, 0);
-       if (fd >= 0) {
-               sys_ioctl(fd, FDEJECT, 0);
-               sys_close(fd);
-       }
-       printk(KERN_NOTICE "VFS: Insert %s and press ENTER\n", buf);
-       fd = sys_open("/dev/console", O_RDWR, 0);
-       if (fd >= 0) {
-               sys_ioctl(fd, TCGETS, (long)&termios);
-               termios.c_lflag &= ~ICANON;
-               sys_ioctl(fd, TCSETSF, (long)&termios);
-               sys_read(fd, &c, 1);
-               termios.c_lflag |= ICANON;
-               sys_ioctl(fd, TCSETSF, (long)&termios);
-               sys_close(fd);
-       }
-}
-#endif
-
 void __init mount_root(void)
 {
 #ifdef CONFIG_ROOT_NFS
@@ -460,3 +463,19 @@ out_nomount:
        security_sb_post_mountroot();
 }
 
+#else
+
+/*
+ * Prepare the namespace - decide what/where to mount, load ramdisks, etc.
+ */
+void __init prepare_namespace(void)
+{
+       security_sb_post_mountroot();
+}
+
+void __init mount_block_root(char *name, int flags)
+{
+       panic("Booting without initramfs is disabled");
+}
+
+#endif
diff -X dontdiff -pruN linux-2.6.22.base/init/do_mounts_initrd.c 
linux-2.6.22.tmpfsroot/init/do_mounts_initrd.c
--- linux-2.6.22.base/init/do_mounts_initrd.c   2007-07-12 23:28:43.000000000 
+0200
+++ linux-2.6.22.tmpfsroot/init/do_mounts_initrd.c      2007-07-12 
23:33:22.000000000 +0200
@@ -13,6 +13,9 @@
 unsigned long initrd_start, initrd_end;
 int initrd_below_start_ok;
 unsigned int real_root_dev;    /* do_proc_dointvec cannot handle kdev_t */
+
+#ifndef CONFIG_DISABLE_MOUNT_ON_BOOT
+
 static int __initdata old_fd, root_fd;
 static int __initdata mount_initrd = 1;
 
@@ -122,3 +125,5 @@ int __init initrd_load(void)
        sys_unlink("/initrd.image");
        return 0;
 }
+
+#endif
diff -X dontdiff -pruN linux-2.6.22.base/init/initramfs.c 
linux-2.6.22.tmpfsroot/init/initramfs.c
--- linux-2.6.22.base/init/initramfs.c  2007-07-12 23:28:07.000000000 +0200
+++ linux-2.6.22.tmpfsroot/init/initramfs.c     2007-07-12 23:23:25.000000000 
+0200
@@ -549,7 +549,7 @@ static int __init populate_rootfs(void)
                panic(err);
 #ifdef CONFIG_BLK_DEV_INITRD
        if (initrd_start) {
-#ifdef CONFIG_BLK_DEV_RAM
+#if defined CONFIG_BLK_DEV_RAM && !defined CONFIG_DISABLE_MOUNT_ON_BOOT
                int fd;
                printk(KERN_INFO "checking if image is initramfs...");
                err = unpack_to_rootfs((char *)initrd_start,
diff -X dontdiff -pruN linux-2.6.22.base/usr/Kconfig 
linux-2.6.22.tmpfsroot/usr/Kconfig
--- linux-2.6.22.base/usr/Kconfig       2007-07-12 23:28:45.000000000 +0200
+++ linux-2.6.22.tmpfsroot/usr/Kconfig  2007-07-12 23:39:00.000000000 +0200
@@ -44,3 +44,11 @@ config INITRAMFS_ROOT_GID
          owned by group root in the initial ramdisk image.
 
          If you are not sure, leave it set to "0".
+
+config DISABLE_MOUNT_ON_BOOT
+       bool "Disable kernel root filesystem mount code"
+       depends on TMPFS_ROOT
+       help
+         This disables the kernel's ability to mount a user-specified 
filesysten
+         on boot. This REQUIRES an inital system on initramfs, either using
+         /init for system setup, or directly using /sbin/init.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to