setup vma->vm_page_prot by vm_get_page_prot()
Subsystems (4)
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/1 setup vma->vm_page_prot by vm_get_page_prot()
This patch uses vm_get_page_prot() to setup vma->vm_page_prot. use-vm_read-write-exec-to-set-vm_page_prot.patch just only replaces "& 0x7" with "& (VM_READ|VM_WRITE|VM_EXEC)". This is a non-unified method, because there is a vm_get_page_prot() in mm/mmap.c and exported to kerenl.
Though inside vm_get_page_prot() the protection flags is AND with (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED), it does not hurt correct code.
This patch can replace use-vm_read-write-exec-to-set-vm_page_prot.patch.
--- arch/ia64/mm/init.c | 2 +- fs/exec.c | 2 +- mm/mmap.c | 11 ++++------- mm/mprotect.c | 6 ++---- 4 files changed, 8 insertions(+), 13 deletions(-)
arch/ia64/mm/init.c +1 -1
@@ -130,8 +130,8 @@ ia64_init_addr_space (void) vma->vm_mm = current->mm; vma->vm_start = current->thread.rbs_bot &PAGE_MASK ; vma->vm_end = vma->vm_start +PAGE_SIZE ; - vma->vm_page_prot = protection_map[VM_DATA_DEFAULT_FLAGS &0x7 ]; vma->vm_flags =VM_DATA_DEFAULT_FLAGS |VM_GROWSUP |VM_ACCOUNT ; + vma->vm_page_prot =vm_get_page_prot (vma->vm_flags);down_write (¤t->mm->mmap_sem);if (insert_vm_struct (current->mm, vma)) {up_write (¤t->mm->mmap_sem);
fs/exec.c +1 -1
@@ -260,7 +260,7 @@ static int __bprm_mm_init(struct linux_binprm *bprm) vma->vm_start = vma->vm_end -PAGE_SIZE ; vma->vm_flags =VM_STACK_FLAGS ; - vma->vm_page_prot = protection_map[vma->vm_flags &0x7 ]; + vma->vm_page_prot =vm_get_page_prot (vma->vm_flags); err =insert_vm_struct (mm, vma);if (err) {up_write (&mm->mmap_sem);
mm/mmap.c +4 -7
@@ -1049,8 +1049,7 @@ int vma_wants_writenotify(struct vm_area_struct *vma)/* The open routine did something to the protections already? */ if (pgprot_val (vma->vm_page_prot) != -pgprot_val (protection_map[vm_flags & - (VM_READ |VM_WRITE |VM_EXEC |VM_SHARED )])) +pgprot_val (vm_get_page_prot (vm_flags)))return 0 ;/* Specialty mapping? */
@@ -1131,8 +1130,7 @@ munmap_back: vma->vm_start = addr; vma->vm_end = addr + len; vma->vm_flags = vm_flags; - vma->vm_page_prot = protection_map[vm_flags & - (VM_READ |VM_WRITE |VM_EXEC |VM_SHARED )]; + vma->vm_page_prot =vm_get_page_prot (vm_flags); vma->vm_pgoff = pgoff;if (file) {
@@ -2003,8 +2001,7 @@ unsigned long do_brk(unsigned long addr, unsigned long len) vma->vm_end = addr + len; vma->vm_pgoff = pgoff; vma->vm_flags = flags; - vma->vm_page_prot = protection_map[flags & - (VM_READ |VM_WRITE |VM_EXEC |VM_SHARED )]; + vma->vm_page_prot =vm_get_page_prot (flags);vma_link (mm, vma, prev, rb_link, rb_parent); out: mm->total_vm += len >>PAGE_SHIFT ;
@@ -2210,7 +2207,7 @@ int install_special_mapping(struct mm_struct *mm, vma->vm_end = addr + len; vma->vm_flags = vm_flags | mm->def_flags; - vma->vm_page_prot = protection_map[vma->vm_flags &7 ]; + vma->vm_page_prot =vm_get_page_prot (vma->vm_flags); vma->vm_ops = &special_mapping_vmops; vma->vm_private_data = pages;
mm/mprotect.c +2 -4
@@ -193,11 +193,9 @@ success:* held in write mode. */ vma->vm_flags = newflags; - vma->vm_page_prot = protection_map[newflags & - (VM_READ |VM_WRITE |VM_EXEC |VM_SHARED )]; + vma->vm_page_prot =vm_get_page_prot (newflags);if (vma_wants_writenotify (vma)) { - vma->vm_page_prot = protection_map[newflags & - (VM_READ |VM_WRITE |VM_EXEC )]; + vma->vm_page_prot =vm_get_page_prot (newflags); dirty_accountable =1 ; }
Signature · 2 lines
Coly Li SuSE PRC Labs