From 00258fc185ae43c2d7616dd72da595da5db1e5bb Mon Sep 17 00:00:00 2001 From: Nilton Volpato Date: Mon, 19 Jan 2026 18:14:30 -0800 Subject: [PATCH 1/3] Add EINVAL error handling for tcgetattr fallback --- src/backend/linux_raw/termios/syscalls.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/linux_raw/termios/syscalls.rs b/src/backend/linux_raw/termios/syscalls.rs index 07c3a3d95..e178e0d97 100644 --- a/src/backend/linux_raw/termios/syscalls.rs +++ b/src/backend/linux_raw/termios/syscalls.rs @@ -44,7 +44,7 @@ pub(crate) fn tcgetattr(fd: BorrowedFd<'_>) -> io::Result { // `TCGETS2`, for example a seccomp environment or WSL that only // knows about `TCGETS`. Fall back to the old `TCGETS`. #[cfg(not(any(target_arch = "powerpc", target_arch = "powerpc64")))] - Err(io::Errno::NOTTY) | Err(io::Errno::ACCESS) => tcgetattr_fallback(fd), + Err(io::Errno::NOTTY) | Err(io::Errno::ACCESS) | Err(io::Errno::EINVAL) => tcgetattr_fallback(fd), Err(err) => Err(err), } From 396c4938036447839ade49f26d2b74ec123c0d08 Mon Sep 17 00:00:00 2001 From: Nilton Volpato Date: Mon, 19 Jan 2026 18:35:11 -0800 Subject: [PATCH 2/3] use correct error name --- src/backend/linux_raw/termios/syscalls.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/linux_raw/termios/syscalls.rs b/src/backend/linux_raw/termios/syscalls.rs index e178e0d97..30f77074f 100644 --- a/src/backend/linux_raw/termios/syscalls.rs +++ b/src/backend/linux_raw/termios/syscalls.rs @@ -44,7 +44,7 @@ pub(crate) fn tcgetattr(fd: BorrowedFd<'_>) -> io::Result { // `TCGETS2`, for example a seccomp environment or WSL that only // knows about `TCGETS`. Fall back to the old `TCGETS`. #[cfg(not(any(target_arch = "powerpc", target_arch = "powerpc64")))] - Err(io::Errno::NOTTY) | Err(io::Errno::ACCESS) | Err(io::Errno::EINVAL) => tcgetattr_fallback(fd), + Err(io::Errno::NOTTY) | Err(io::Errno::ACCESS) | Err(io::Errno::INVAL) => tcgetattr_fallback(fd), Err(err) => Err(err), } From 7423974a4ee39cf9a64eff0d2941e9995e2b3703 Mon Sep 17 00:00:00 2001 From: Nilton Volpato Date: Mon, 19 Jan 2026 18:49:30 -0800 Subject: [PATCH 3/3] do the same for TCSETS2 --- src/backend/linux_raw/termios/syscalls.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/backend/linux_raw/termios/syscalls.rs b/src/backend/linux_raw/termios/syscalls.rs index 30f77074f..9b84c861c 100644 --- a/src/backend/linux_raw/termios/syscalls.rs +++ b/src/backend/linux_raw/termios/syscalls.rs @@ -44,7 +44,9 @@ pub(crate) fn tcgetattr(fd: BorrowedFd<'_>) -> io::Result { // `TCGETS2`, for example a seccomp environment or WSL that only // knows about `TCGETS`. Fall back to the old `TCGETS`. #[cfg(not(any(target_arch = "powerpc", target_arch = "powerpc64")))] - Err(io::Errno::NOTTY) | Err(io::Errno::ACCESS) | Err(io::Errno::INVAL) => tcgetattr_fallback(fd), + Err(io::Errno::NOTTY) | Err(io::Errno::ACCESS) | Err(io::Errno::INVAL) => { + tcgetattr_fallback(fd) + } Err(err) => Err(err), } @@ -148,7 +150,7 @@ pub(crate) fn tcsetattr( // Similar to `tcgetattr_fallback`, `NOTTY` or `ACCESS` might mean // the OS doesn't support `TCSETS2`. Fall back to the old `TCSETS`. #[cfg(not(any(target_arch = "powerpc", target_arch = "powerpc64")))] - Err(io::Errno::NOTTY) | Err(io::Errno::ACCESS) => { + Err(io::Errno::NOTTY) | Err(io::Errno::ACCESS) | Err(io::Errno::INVAL) => { tcsetattr_fallback(fd, optional_actions, termios) }