a question about protection_map[]
From: Xishi Qiu
Date: Mon Jul 11 2016 - 06:13:06 EST
Hi,
We can use mprotect to set read only or read/write.
mprotect_fixup()
vma_set_page_prot()
vm_pgprot_modify()
vm_get_page_prot()
protection_map[vm_flags & (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)]
The following code shows that prots from __P001(PROT_READ) and __P010(PROT_WRITE)
are the same, so how does it distinguish read only or read/write from mprotect?
pgprot_t protection_map[16] = {
__P000, __P001, __P010, __P011, __P100, __P101, __P110, __P111,
__S000, __S001, __S010, __S011, __S100, __S101, __S110, __S111
};
#define __P001 PAGE_READONLY
#define __P010 PAGE_COPY
#define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | \
_PAGE_ACCESSED | _PAGE_NX)
#define PAGE_COPY_NOEXEC __pgprot(_PAGE_PRESENT | _PAGE_USER | \
_PAGE_ACCESSED | _PAGE_NX)
#define PAGE_COPY PAGE_COPY_NOEXEC
Thanks,
Xishi Qiu