Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1234377
| From | Dave Hansen <dave@sr71.net> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 13/25] mm: factor out VMA fault permission checking |
| Date | 2015-09-28 21:30 +0200 |
| Message-ID | <qdMhB-gH-51@gated-at.bofh.it> (permalink) |
| References | <qdM7T-59-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
From: Dave Hansen <dave.hansen@linux.intel.com>
This code matches a fault condition up with the VMA and ensures
that the VMA allows the fault to be handled instead of just
erroring out.
We will be extending this in a moment to comprehend protection
keys.
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
---
b/mm/gup.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff -puN mm/gup.c~pkeys-10-pte-fault mm/gup.c
--- a/mm/gup.c~pkeys-10-pte-fault 2015-09-28 11:39:46.790221164 -0700
+++ b/mm/gup.c 2015-09-28 11:39:46.794221345 -0700
@@ -554,6 +554,17 @@ next_page:
}
EXPORT_SYMBOL(__get_user_pages);
+bool vma_permits_fault(struct vm_area_struct *vma, unsigned int fault_flags)
+{
+ vm_flags_t vm_flags =
+ (fault_flags & FAULT_FLAG_WRITE) ? VM_WRITE : VM_READ;
+
+ if (!(vm_flags & vma->vm_flags))
+ return false;
+
+ return true;
+}
+
/*
* fixup_user_fault() - manually resolve a user page fault
* @tsk: the task_struct to use for page fault accounting, or
@@ -585,15 +596,13 @@ int fixup_user_fault(struct task_struct
unsigned long address, unsigned int fault_flags)
{
struct vm_area_struct *vma;
- vm_flags_t vm_flags;
int ret;
vma = find_extend_vma(mm, address);
if (!vma || address < vma->vm_start)
return -EFAULT;
- vm_flags = (fault_flags & FAULT_FLAG_WRITE) ? VM_WRITE : VM_READ;
- if (!(vm_flags & vma->vm_flags))
+ if (!vma_permits_fault(vma, fault_flags))
return -EFAULT;
ret = handle_mm_fault(mm, vma, address, fault_flags);
_
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 00/25] x86: Memory Protection Keys Dave Hansen <dave@sr71.net> - 2015-09-28 21:30 +0200
[PATCH 21/25] mm: implement new mprotect_key() system call Dave Hansen <dave@sr71.net> - 2015-09-28 21:30 +0200
Re: [PATCH 21/25] mm: implement new mprotect_key() system call Michael Ellerman <mpe@ellerman.id.au> - 2015-09-29 08:40 +0200
Re: [PATCH 21/25] mm: implement new mprotect_key() system call Dave Hansen <dave@sr71.net> - 2015-09-29 16:20 +0200
[PATCH 07/25] x86, pkeys: new page fault error code bit: PF_PK Dave Hansen <dave@sr71.net> - 2015-09-28 21:30 +0200
Re: [PATCH 07/25] x86, pkeys: new page fault error code bit: PF_PK Thomas Gleixner <tglx@linutronix.de> - 2015-10-01 14:00 +0200
Re: [PATCH 07/25] x86, pkeys: new page fault error code bit: PF_PK Dave Hansen <dave@sr71.net> - 2015-10-01 19:20 +0200
[PATCH 16/25] x86, pkeys: optimize fault handling in access_error() Dave Hansen <dave@sr71.net> - 2015-09-28 21:30 +0200
[PATCH 13/25] mm: factor out VMA fault permission checking Dave Hansen <dave@sr71.net> - 2015-09-28 21:30 +0200
[PATCH 08/25] x86, pkeys: store protection in high VMA flags Dave Hansen <dave@sr71.net> - 2015-09-28 21:30 +0200
[PATCH 06/25] x86, pkeys: PTE bits for storing protection key Dave Hansen <dave@sr71.net> - 2015-09-28 21:30 +0200
[PATCH 14/25] mm: simplify get_user_pages() PTE bit handling Dave Hansen <dave@sr71.net> - 2015-09-28 21:30 +0200
csiph-web