mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-07-11 15:29:18 +00:00
Update kernel
This commit is contained in:
@ -25,24 +25,10 @@
|
||||
|
||||
#include "../../syscalls.h"
|
||||
#include "../../kernel.h"
|
||||
#include "../../ipc.h"
|
||||
|
||||
using InterProcessCommunication::IPC;
|
||||
using InterProcessCommunication::IPCID;
|
||||
using Tasking::PCB;
|
||||
using Tasking::TCB;
|
||||
using Tasking::TaskState::Ready;
|
||||
using Tasking::TaskState::Terminated;
|
||||
using namespace Memory;
|
||||
|
||||
#define SysFrm SyscallsFrame
|
||||
|
||||
#if defined(a64)
|
||||
typedef long arch_t;
|
||||
#elif defined(a32)
|
||||
typedef int arch_t;
|
||||
#endif
|
||||
|
||||
/* https://pubs.opengroup.org/onlinepubs/009604499/functions/mprotect.html */
|
||||
int sys_mprotect(SysFrm *,
|
||||
void *addr, size_t len, int prot)
|
||||
@ -58,16 +44,16 @@ int sys_mprotect(SysFrm *,
|
||||
bool p_Write = prot & sc_PROT_WRITE;
|
||||
// bool p_Exec = prot & sc_PROT_EXEC;
|
||||
|
||||
Tasking::PCB *pcb = thisProcess;
|
||||
Memory::Virtual vmm = Memory::Virtual(pcb->PageTable);
|
||||
PCB *pcb = thisProcess;
|
||||
Virtual vmm = Virtual(pcb->PageTable);
|
||||
|
||||
for (uintptr_t i = uintptr_t(addr);
|
||||
i < uintptr_t(addr) + len;
|
||||
i += PAGE_SIZE)
|
||||
{
|
||||
if (likely(!vmm.Check((void *)i, Memory::G)))
|
||||
if (likely(!vmm.Check((void *)i, G)))
|
||||
{
|
||||
Memory::PageTableEntry *pte = vmm.GetPTE(addr);
|
||||
PageTableEntry *pte = vmm.GetPTE(addr);
|
||||
if (!pte->Present ||
|
||||
(!pte->UserSupervisor && p_Read) ||
|
||||
(!pte->ReadWrite && p_Write))
|
||||
|
Reference in New Issue
Block a user