From 159fd7506a4a21d17e26e6e5633a6e958a6481de Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 4 May 2023 02:39:40 +0300 Subject: [PATCH] Do not accept invalid kernel private object --- SystemCalls/Native.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/SystemCalls/Native.cpp b/SystemCalls/Native.cpp index b8990eb..2e6df15 100644 --- a/SystemCalls/Native.cpp +++ b/SystemCalls/Native.cpp @@ -268,6 +268,7 @@ static uint64_t sys_file_open(SyscallsFrame *Frame, const char *Path, uint64_t F static int sys_file_close(SyscallsFrame *Frame, void *KernelPrivate) { debug("(KernelPrivate: %#lx)", KernelPrivate); + if (KernelPrivate) { VirtualFileSystem::File KPObj = *(VirtualFileSystem::File *)KernelPrivate; @@ -282,6 +283,9 @@ static int sys_file_close(SyscallsFrame *Frame, void *KernelPrivate) static uint64_t sys_file_read(SyscallsFrame *Frame, void *KernelPrivate, uint64_t Offset, uint8_t *Buffer, uint64_t Size) { + if (KernelPrivate == nullptr) + return 0; + debug("(KernelPrivate: %#lx, Offset: %#lx, Buffer: %#lx, Size: %#lx)", KernelPrivate, Offset, Buffer, Size); return vfs->Read(*(VirtualFileSystem::File *)KernelPrivate, Offset, Buffer, Size); UNUSED(Frame); @@ -289,6 +293,9 @@ static uint64_t sys_file_read(SyscallsFrame *Frame, void *KernelPrivate, uint64_ static uint64_t sys_file_write(SyscallsFrame *Frame, void *KernelPrivate, uint64_t Offset, uint8_t *Buffer, uint64_t Size) { + if (KernelPrivate == nullptr) + return 0; + debug("(KernelPrivate: %#lx, Offset: %#lx, Buffer: %#lx, Size: %#lx)", KernelPrivate, Offset, Buffer, Size); return vfs->Write(*(VirtualFileSystem::File *)KernelPrivate, Offset, Buffer, Size); UNUSED(Frame);