diff options
| -rw-r--r-- | arch/arm/kernel/traps.c | 17 |
1 files changed, 2 insertions, 15 deletions
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 4d268d912b0e..9b2c5d42c143 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c | |||
| @@ -550,24 +550,11 @@ static long do_cache_op_restart(struct restart_block *unused) | |||
| 550 | static inline int | 550 | static inline int |
| 551 | do_cache_op(unsigned long start, unsigned long end, int flags) | 551 | do_cache_op(unsigned long start, unsigned long end, int flags) |
| 552 | { | 552 | { |
| 553 | struct mm_struct *mm = current->active_mm; | ||
| 554 | struct vm_area_struct *vma; | ||
| 555 | |||
| 556 | if (end < start || flags) | 553 | if (end < start || flags) |
| 557 | return -EINVAL; | 554 | return -EINVAL; |
| 558 | 555 | ||
| 559 | down_read(&mm->mmap_sem); | 556 | if (!access_ok(VERIFY_READ, start, end - start)) |
| 560 | vma = find_vma(mm, start); | 557 | return -EFAULT; |
| 561 | if (!vma || vma->vm_start >= end) { | ||
| 562 | up_read(&mm->mmap_sem); | ||
| 563 | return -EINVAL; | ||
| 564 | } | ||
| 565 | |||
| 566 | if (start < vma->vm_start) | ||
| 567 | start = vma->vm_start; | ||
| 568 | if (end > vma->vm_end) | ||
| 569 | end = vma->vm_end; | ||
| 570 | up_read(&mm->mmap_sem); | ||
| 571 | 558 | ||
| 572 | return __do_cache_op(start, end); | 559 | return __do_cache_op(start, end); |
| 573 | } | 560 | } |
