From eab9106919bde074c3421cc414b70aa2cf3db1c4 Mon Sep 17 00:00:00 2001 From: morganllewellynjones Date: Mon, 16 Sep 2024 15:10:41 -0700 Subject: [PATCH 1/2] Fixed ENAMETOOLONG error in setup_console_socket Signed-off-by: morganllewellynjones --- crates/libcontainer/src/tty.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/crates/libcontainer/src/tty.rs b/crates/libcontainer/src/tty.rs index 4ca06b2ef..3bf5fd008 100644 --- a/crates/libcontainer/src/tty.rs +++ b/crates/libcontainer/src/tty.rs @@ -1,5 +1,6 @@ //! tty (teletype) for user-system interaction +use std::env; use std::io::IoSlice; use std::os::unix::fs::symlink; use std::os::unix::io::AsRawFd; @@ -75,7 +76,13 @@ pub fn setup_console_socket( console_socket_path: &Path, socket_name: &str, ) -> Result { - let linked = container_dir.join(socket_name); + // Move into the container directory to avoid sun family conflicts with long socket path names. + + let prev_dir = env::current_dir().unwrap(); + let _ = env::set_current_dir(container_dir); + + let linked = PathBuf::from(socket_name); + symlink(console_socket_path, &linked).map_err(|err| TTYError::Symlink { source: err, linked: linked.to_path_buf().into(), @@ -105,6 +112,8 @@ pub fn setup_console_socket( })?, Ok(()) => csocketfd.as_raw_fd(), }; + + let _ = env::set_current_dir(prev_dir); Ok(csocketfd) } From 52c0bf67c6fb17cddc6334e1fb68046cfeb800c4 Mon Sep 17 00:00:00 2001 From: morganllewellynjones <95446220+morganllewellynjones@users.noreply.github.com> Date: Sat, 28 Sep 2024 12:39:49 -0700 Subject: [PATCH 2/2] Update crates/libcontainer/src/tty.rs Co-authored-by: Toru Komatsu --- crates/libcontainer/src/tty.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/libcontainer/src/tty.rs b/crates/libcontainer/src/tty.rs index 3bf5fd008..b9a753127 100644 --- a/crates/libcontainer/src/tty.rs +++ b/crates/libcontainer/src/tty.rs @@ -77,6 +77,7 @@ pub fn setup_console_socket( socket_name: &str, ) -> Result { // Move into the container directory to avoid sun family conflicts with long socket path names. + // ref: https://github.com/containers/youki/issues/2910 let prev_dir = env::current_dir().unwrap(); let _ = env::set_current_dir(container_dir);