From 175f9b06e92d466d7abae4c21fca887131bce216 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Wed, 13 Oct 2021 16:59:58 +1100 Subject: [PATCH] rustjail: Allow container devices in subdirectories Many device nodes go directly under /dev, however some are conventionally placed in subdirectories under /dev. For example /dev/vfio/vfio or /dev/pts/ptmx. Currently, attempting to pass such a device into a Kata container will fail because mknod() will get an ENOENT because the parent directory is missing (or an equivalent error for bind_dev()). Correct that by making subdirectories as necessary in create_devices(). Signed-off-by: David Gibson --- src/agent/rustjail/src/mount.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/agent/rustjail/src/mount.rs b/src/agent/rustjail/src/mount.rs index ac9498c73d..7d1f7bc8fe 100644 --- a/src/agent/rustjail/src/mount.rs +++ b/src/agent/rustjail/src/mount.rs @@ -853,6 +853,9 @@ fn create_devices(devices: &[LinuxDevice], bind: bool) -> Result<()> { let msg = format!("{} is not a valid device path", dev.path); anyhow!(msg) })?; + if let Some(dir) = path.parent() { + fs::create_dir_all(dir).context(format!("Creating container device {:?}", dev))?; + } op(dev, path).context(format!("Creating container device {:?}", dev))?; } stat::umask(old);