diff options
author | Alex Shi <alex.shi@linaro.org> | 2014-06-09 13:15:41 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2014-06-09 13:15:41 +0800 |
commit | 965da07af5a118bcd22798f2081dfe6daf361b07 (patch) | |
tree | 0bbdaa15b5073c2f504b3e66f31a7b208a5c5247 /mm/memory.c | |
parent | ac05715acc649e5f91c18ae46b8fcac71e755b33 (diff) | |
parent | 3b8d7f4db34913c8e2ea0177723784b646f7424e (diff) |
Merge branch 'linux-linaro-lsk' into linux-linaro-lsk-rt
Conflicts:
include/linux/list.h
kernel/irq/manage.c
Diffstat (limited to 'mm/memory.c')
-rw-r--r-- | mm/memory.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/mm/memory.c b/mm/memory.c index ee422e6f049c..912046cf9a3f 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -1937,12 +1937,17 @@ int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm, 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)) + return -EFAULT; + ret = handle_mm_fault(mm, vma, address, fault_flags); if (ret & VM_FAULT_ERROR) { if (ret & VM_FAULT_OOM) |