diff options
author | Stephen Rothwell <sfr@canb.auug.org.au> | 2014-08-04 20:36:51 +1000 |
---|---|---|
committer | Stephen Rothwell <sfr@canb.auug.org.au> | 2014-08-04 20:36:51 +1000 |
commit | a4545c61a6ecdcd609c7f16f0169708ee3e8a95c (patch) | |
tree | 7e06da4480cef9b31a66ccb672db147cf9a2af3c /arch/m68k | |
parent | 27d6e5ca9c32fcce8d710e02fc0022eb36a8ae48 (diff) | |
parent | 929c76e4e6292770322822a50e08b8feaa4afbbf (diff) |
Merge branch 'akpm-current/current'
Conflicts:
arch/arm64/Kconfig
drivers/rapidio/devices/tsi721_dma.c
kernel/kexec.c
Diffstat (limited to 'arch/m68k')
-rw-r--r-- | arch/m68k/kernel/sys_m68k.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/arch/m68k/kernel/sys_m68k.c b/arch/m68k/kernel/sys_m68k.c index 3a480b3df0d6..d2263a0bdc3d 100644 --- a/arch/m68k/kernel/sys_m68k.c +++ b/arch/m68k/kernel/sys_m68k.c @@ -376,7 +376,6 @@ cache_flush_060 (unsigned long addr, int scope, int cache, unsigned long len) asmlinkage int sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) { - struct vm_area_struct *vma; int ret = -EINVAL; if (scope < FLUSH_SCOPE_LINE || scope > FLUSH_SCOPE_ALL || @@ -389,16 +388,23 @@ sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) if (!capable(CAP_SYS_ADMIN)) goto out; } else { + struct vm_area_struct *vma; + bool invalid; + + /* Check for overflow. */ + if (addr + len < addr) + goto out; + /* * Verify that the specified address region actually belongs * to this process. */ - vma = find_vma (current->mm, addr); ret = -EINVAL; - /* Check for overflow. */ - if (addr + len < addr) - goto out; - if (vma == NULL || addr < vma->vm_start || addr + len > vma->vm_end) + down_read(¤t->mm->mmap_sem); + vma = find_vma(current->mm, addr); + invalid = !vma || addr < vma->vm_start || addr + len > vma->vm_end; + up_read(¤t->mm->mmap_sem); + if (invalid) goto out; } |