diff --git a/arch/x86/mm/page.c b/arch/x86/mm/page.c index dad71657..cecbab61 100644 --- a/arch/x86/mm/page.c +++ b/arch/x86/mm/page.c @@ -413,10 +413,19 @@ int change_page_permissions(size_t start, size_t end, uint32_t flags) newflags &= ~PG_PRESENT; // update flags - if (!(flags & VMA_WRITE)) + if (!(flags & VMA_WRITE)) { newflags &= ~PG_RW; - else +#ifdef CONFIG_ROCKCREEK + if (newflags & (PG_SVM_STRONG|PG_SVM_LAZYRELEASE)) + newflags &= ~PG_MPE; +#endif + } else { newflags |= PG_RW; +#ifdef CONFIG_ROCKCREEK + if (newflags & (PG_SVM_STRONG|PG_SVM_LAZYRELEASE)) + newflags |= PG_MPE; +#endif + } pgt->entries[index2] = (newflags & 0xFFF) | (phyaddr & 0xFFFFF000);