From 046680da48eac6dba5d5994679758ef77f0b1815 Mon Sep 17 00:00:00 2001 From: MarcZX100 Date: Sat, 10 Oct 2026 14:55:26 +0000 Subject: [PATCH] fix(libkernel): reject empty mkdir paths --- core/libs/prx/libkernel/File/src/Stdio.cpp | 1 + core/libs/tests/GuestKernelSync.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/core/libs/prx/libkernel/File/src/Stdio.cpp b/core/libs/prx/libkernel/File/src/Stdio.cpp index fe4a412ba..17436b46d 100644 --- a/core/libs/prx/libkernel/File/src/Stdio.cpp +++ b/core/libs/prx/libkernel/File/src/Stdio.cpp @@ -544,6 +544,7 @@ int APS5_VABI getdents_nid_postfix(int fd, char* buf, int nbytes) { int APS5_VABI sceKernelMkdir(const char* path, uint16_t mode) { (void)mode; if (path == nullptr) throw std::invalid_argument("sceKernelMkdir: path is null"); + if (!*path) return SceErrorFromErrno(GUEST_ENOENT); auto native = ResolvePath_nid_no_patch(path); while (!native.has_filename() && native.has_relative_path()) native = native.parent_path(); std::error_code error; diff --git a/core/libs/tests/GuestKernelSync.cpp b/core/libs/tests/GuestKernelSync.cpp index 4bfbdefd0..5214ff65c 100644 --- a/core/libs/tests/GuestKernelSync.cpp +++ b/core/libs/tests/GuestKernelSync.cpp @@ -37,6 +37,7 @@ static bool Recorded(const char* guest) { } int main() { std::filesystem::remove_all("kernel_sync_probe"); + Require(sceKernelMkdir("", 0777) == static_cast(0x80020002u)); Require(sceKernelMkdir("/", 0777) == static_cast(0x80020011u)); Require(sceKernelMkdir("kernel_sync_probe", 0777) == 0); Require(Recorded("kernel_sync_probe"));