Do not accept invalid kernel private object

This commit is contained in:
Alex 2023-05-04 02:39:40 +03:00
parent d7427ff2fa
commit 159fd7506a
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD

View File

@ -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) static int sys_file_close(SyscallsFrame *Frame, void *KernelPrivate)
{ {
debug("(KernelPrivate: %#lx)", KernelPrivate); debug("(KernelPrivate: %#lx)", KernelPrivate);
if (KernelPrivate) if (KernelPrivate)
{ {
VirtualFileSystem::File KPObj = *(VirtualFileSystem::File *)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) 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); debug("(KernelPrivate: %#lx, Offset: %#lx, Buffer: %#lx, Size: %#lx)", KernelPrivate, Offset, Buffer, Size);
return vfs->Read(*(VirtualFileSystem::File *)KernelPrivate, Offset, Buffer, Size); return vfs->Read(*(VirtualFileSystem::File *)KernelPrivate, Offset, Buffer, Size);
UNUSED(Frame); 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) 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); debug("(KernelPrivate: %#lx, Offset: %#lx, Buffer: %#lx, Size: %#lx)", KernelPrivate, Offset, Buffer, Size);
return vfs->Write(*(VirtualFileSystem::File *)KernelPrivate, Offset, Buffer, Size); return vfs->Write(*(VirtualFileSystem::File *)KernelPrivate, Offset, Buffer, Size);
UNUSED(Frame); UNUSED(Frame);