From 34dc861cdebcef86ec3343c03ce5e26558b34f4b Mon Sep 17 00:00:00 2001 From: "fupan.lfp" Date: Mon, 1 Mar 2021 21:20:01 +0800 Subject: [PATCH] rustjail: fix the issue of bind mount device file from guest When do pass guest device files to container, the source file wouldn't be a regular file, but we also need to create a corresponding destination file to bind mount source file to it. Thus it's better to check whether the source file was a directory instead of regular file. Fixes: #1477 Signed-off-by: fupan.lfp --- src/agent/rustjail/src/mount.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/agent/rustjail/src/mount.rs b/src/agent/rustjail/src/mount.rs index b876aef50a..76bd57a3af 100644 --- a/src/agent/rustjail/src/mount.rs +++ b/src/agent/rustjail/src/mount.rs @@ -736,10 +736,10 @@ fn mount_from( let src = if m.r#type.as_str() == "bind" { let src = fs::canonicalize(m.source.as_str())?; - let dir = if src.is_file() { - Path::new(&dest).parent().unwrap() - } else { + let dir = if src.is_dir() { Path::new(&dest) + } else { + Path::new(&dest).parent().unwrap() }; let _ = fs::create_dir_all(&dir).map_err(|e| { @@ -752,7 +752,7 @@ fn mount_from( }); // make sure file exists so we can bind over it - if src.is_file() { + if !src.is_dir() { let _ = OpenOptions::new().create(true).write(true).open(&dest); } src.to_str().unwrap().to_string()