switch_root: zap the last directory for the mount point of new-root

阿保 純一 abo_junghichi at yahoo.co.jp
Fri Jul 19 07:26:56 UTC 2019


As the author said in the comment of util-linux/switch_root.c, current implementation leaves the mount point of new root-file-system without rmdir().
As long as I experimented on a linux kernel, current process of "/" still points old root-file-system even "/" is overmounted. So we can still access and zap ititramfs after the directory is free from mount point.

The patch below should zap the last directory left in the initramfs.
It only swaps the timings of overmount and zapping.

diff -Naur busybox-1.31.0.org/util-linux/switch_root.c busybox-1.31.0/util-linux/switch_root.c
--- busybox-1.31.0.org/util-linux/switch_root.c 2019-07-18 23:18:54.791346155 +0900
+++ busybox-1.31.0/util-linux/switch_root.c     2019-07-18 23:21:33.867785730 +0900
@@ -257,14 +257,14 @@
 	}
 
 	if (!dry_run) {
-		// Zap everything out of rootdev
-		delete_contents("/", rootdev);
-
 		// Overmount / with newdir and chroot into it
 		if (mount(".", "/", NULL, MS_MOVE, NULL)) {
 			// For example, fails when newroot is not a mountpoint
 			bb_perror_msg_and_die("error moving root");
 		}
+
+		// Zap everything out of rootdev
+		delete_contents("/", rootdev);
 	}
 	xchroot(".");
 	// The chdir is needed to recalculate "." and ".." links
-------------- next part --------------
A non-text attachment was scrubbed...
Name: switch_root.patch
Type: text/x-diff
Size: 736 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/busybox/attachments/20190719/13604aeb/attachment.patch>


More information about the busybox mailing list