projects
/
platform
/
adaptation
/
renesas_rcar
/
renesas_kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
cpuset: fix a regression in validating config change
[platform/adaptation/renesas_rcar/renesas_kernel.git]
/
mm
/
mremap.c
diff --git
a/mm/mremap.c
b/mm/mremap.c
index
463a257
..
457d34e
100644
(file)
--- a/
mm/mremap.c
+++ b/
mm/mremap.c
@@
-126,7
+126,7
@@
static void move_ptes(struct vm_area_struct *vma, pmd_t *old_pmd,
continue;
pte = ptep_get_and_clear(mm, old_addr, old_pte);
pte = move_pte(pte, new_vma->vm_page_prot, old_addr, new_addr);
continue;
pte = ptep_get_and_clear(mm, old_addr, old_pte);
pte = move_pte(pte, new_vma->vm_page_prot, old_addr, new_addr);
- set_pte_at(mm, new_addr, new_pte, pte);
+ set_pte_at(mm, new_addr, new_pte, pte
_mksoft_dirty(pte)
);
}
arch_leave_lazy_mmu_mode();
}
arch_leave_lazy_mmu_mode();
@@
-456,13
+456,14
@@
SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
unsigned long charged = 0;
bool locked = false;
unsigned long charged = 0;
bool locked = false;
- down_write(¤t->mm->mmap_sem);
-
if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))
if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))
- goto out;
+ return ret;
+
+ if (flags & MREMAP_FIXED && !(flags & MREMAP_MAYMOVE))
+ return ret;
if (addr & ~PAGE_MASK)
if (addr & ~PAGE_MASK)
-
goto ou
t;
+
return re
t;
old_len = PAGE_ALIGN(old_len);
new_len = PAGE_ALIGN(new_len);
old_len = PAGE_ALIGN(old_len);
new_len = PAGE_ALIGN(new_len);
@@
-473,12
+474,13
@@
SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
* a zero new-len is nonsensical.
*/
if (!new_len)
* a zero new-len is nonsensical.
*/
if (!new_len)
- goto out;
+ return ret;
+
+ down_write(¤t->mm->mmap_sem);
if (flags & MREMAP_FIXED) {
if (flags & MREMAP_FIXED) {
- if (flags & MREMAP_MAYMOVE)
- ret = mremap_to(addr, old_len, new_addr, new_len,
- &locked);
+ ret = mremap_to(addr, old_len, new_addr, new_len,
+ &locked);
goto out;
}
goto out;
}