From 42b2ad83cdcf6e959ecb378c5040c60d9c64becf Mon Sep 17 00:00:00 2001 From: ChiamakaUI <55190142+ChiamakaUI@users.noreply.github.com> Date: Sat, 31 Jan 2026 21:12:59 +0100 Subject: [PATCH] mknod: fix SELinux cleanup when context setting fails (#10582) --- src/uu/mknod/src/mknod.rs | 2 +- tests/by-util/test_mknod.rs | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/uu/mknod/src/mknod.rs b/src/uu/mknod/src/mknod.rs index 558717a8d..9ab0af057 100644 --- a/src/uu/mknod/src/mknod.rs +++ b/src/uu/mknod/src/mknod.rs @@ -94,7 +94,7 @@ fn mknod(file_name: &str, config: Config) -> i32 { config.context, ) { // if it fails, delete the file - let _ = std::fs::remove_dir(file_name); + let _ = std::fs::remove_file(file_name); eprintln!("{}: {}", uucore::util_name(), e); return 1; } diff --git a/tests/by-util/test_mknod.rs b/tests/by-util/test_mknod.rs index 304f2b4a8..1bcae7ea3 100644 --- a/tests/by-util/test_mknod.rs +++ b/tests/by-util/test_mknod.rs @@ -240,3 +240,21 @@ fn test_mknod_selinux_invalid() { } } } + +#[test] +#[cfg(feature = "feat_selinux")] +fn test_mknod_selinux_invalid_cleanup() { + let scene = TestScenario::new(util_name!()); + let at = &scene.fixtures; + let dest = "test_fifo"; + + new_ucmd!() + .arg("--context=invalid_context_t") + .arg(at.plus_as_string(dest)) + .arg("p") + .fails() + .no_stdout(); + + // invalid context → node must not exist + assert!(!at.file_exists(dest)); +}