summaryrefslogtreecommitdiff
path: root/arch/m68k
diff options
context:
space:
mode:
authorStephen Rothwell <sfr@canb.auug.org.au>2014-08-04 20:36:51 +1000
committerStephen Rothwell <sfr@canb.auug.org.au>2014-08-04 20:36:51 +1000
commita4545c61a6ecdcd609c7f16f0169708ee3e8a95c (patch)
tree7e06da4480cef9b31a66ccb672db147cf9a2af3c /arch/m68k
parent27d6e5ca9c32fcce8d710e02fc0022eb36a8ae48 (diff)
parent929c76e4e6292770322822a50e08b8feaa4afbbf (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.c18
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(&current->mm->mmap_sem);
+ vma = find_vma(current->mm, addr);
+ invalid = !vma || addr < vma->vm_start || addr + len > vma->vm_end;
+ up_read(&current->mm->mmap_sem);
+ if (invalid)
goto out;
}