diff --git a/kernel-src/mm/vmm.c b/kernel-src/mm/vmm.c index ef402c29..d21e9d3d 100644 --- a/kernel-src/mm/vmm.c +++ b/kernel-src/mm/vmm.c @@ -220,7 +220,7 @@ static void destroyrange(vmmcontext_t *context, vmmrange_t *range, uintmax_t _of cred_t *cred = proc ? &proc->cred : NULL; if ((range->flags & VMM_FLAGS_FILE) && (range->flags & VMM_FLAGS_SHARED) && (flags & VMM_DESTROY_FLAGS_NOSYNC) == 0) { - __assert(VOP_MUNMAP(range->vnode, vaddr, range->offset + offset, mmuflagstovnodeflags(range->mmuflags), cred) == 0); + __assert(VOP_MUNMAP(range->vnode, vaddr, range->offset + offset, mmuflagstovnodeflags(range->mmuflags) | (range->flags & VMM_FLAGS_SHARED ? V_FFLAGS_SHARED : 0), cred) == 0); } else { pmm_free(physical, 1); arch_mmu_unmap(context->pagetable, vaddr); @@ -330,7 +330,7 @@ bool vmm_pagefault(void *addr, bool user, int actions) { if (range->flags & VMM_FLAGS_FILE) { uintmax_t mapoffset = (uintptr_t)addr - (uintptr_t)range->start; - __assert(VOP_MMAP(range->vnode, addr, range->offset + mapoffset, mmuflagstovnodeflags(range->mmuflags), cred) == 0); + __assert(VOP_MMAP(range->vnode, addr, range->offset + mapoffset, mmuflagstovnodeflags(range->mmuflags) | (range->flags & VMM_FLAGS_SHARED ? V_FFLAGS_SHARED : 0), cred) == 0); status = true; } else { void *paddr = pmm_alloc(1, PMM_SECTION_DEFAULT);