diff --git a/src/uu/mknod/src/mknod.rs b/src/uu/mknod/src/mknod.rs index 558717a8d24..9ab0af0572d 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 304f2b4a8a6..1bcae7ea31a 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)); +}