From 3ee62408069569bd5e56f319d4c842eb58dd43f5 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 7 Jul 2026 15:24:14 +0300 Subject: [PATCH] Kernel: Prioritize EEXISTS sys_mkdir This fixes `mkdir -p ...` failing to create existing parents which are not writable --- kernel/kernel/Process.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kernel/kernel/Process.cpp b/kernel/kernel/Process.cpp index 217b9d44..647ddb63 100644 --- a/kernel/kernel/Process.cpp +++ b/kernel/kernel/Process.cpp @@ -1527,7 +1527,11 @@ namespace Kernel uid_gid_t { m_credentials.euid(), m_credentials.egid() }; }); - auto [parent, file_name] = TRY(find_parent_file(fd, path, O_WRONLY)); + auto [parent, file_name] = TRY(find_parent_file(fd, path, O_SEARCH)); + if (!parent.inode->find_inode(file_name).is_error()) + return BAN::Error::from_errno(EEXIST); + if (!parent.inode->can_access(m_credentials, O_WRONLY)) + return BAN::Error::from_errno(EACCES); TRY(parent.inode->create_directory(file_name, (mode & 0777) | Inode::Mode::IFDIR, uid, gid)); return 0;