Merge pull request #1230 from lifupan/2.0-dev

rustjail: fix the issue of bind mount /dev
This commit is contained in:
Fupan Li
2021-01-08 13:40:10 +08:00
committed by GitHub

View File

@@ -188,6 +188,7 @@ pub fn init_rootfs(
None::<&str>, None::<&str>,
)?; )?;
let mut bind_mount_dev = false;
for m in &spec.mounts { for m in &spec.mounts {
let (mut flags, data) = parse_mount(&m); let (mut flags, data) = parse_mount(&m);
if !m.destination.starts_with('/') || m.destination.contains("..") { if !m.destination.starts_with('/') || m.destination.contains("..") {
@@ -201,6 +202,9 @@ pub fn init_rootfs(
mount_cgroups(cfd_log, &m, rootfs, flags, &data, cpath, mounts)?; mount_cgroups(cfd_log, &m, rootfs, flags, &data, cpath, mounts)?;
} else { } else {
if m.destination == "/dev" { if m.destination == "/dev" {
if m.r#type == "bind" {
bind_mount_dev = true;
}
flags &= !MsFlags::MS_RDONLY; flags &= !MsFlags::MS_RDONLY;
} }
@@ -242,9 +246,14 @@ pub fn init_rootfs(
let olddir = unistd::getcwd()?; let olddir = unistd::getcwd()?;
unistd::chdir(rootfs)?; unistd::chdir(rootfs)?;
// in case the /dev directory was binded mount from guest,
// then there's no need to create devices nodes and symlinks
// in /dev.
if !bind_mount_dev {
default_symlinks()?; default_symlinks()?;
create_devices(&linux.devices, bind_device)?; create_devices(&linux.devices, bind_device)?;
ensure_ptmx()?; ensure_ptmx()?;
}
unistd::chdir(&olddir)?; unistd::chdir(&olddir)?;