On Fri, Jul 19, 2019 at 3:27 PM 阿保 純一 <abo_junghi...@yahoo.co.jp> wrote:
>
> 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

There's side benefit for this patch: In case that overmount fails, we can have
a rootfs kept intact (instead of almost destroyed).

I think you should adjust the comment line:
// Zap everything out of (old) rootdev, where "/" still points to before chroot
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to