9 #include <linux/slab.h>
12 #include <linux/shm.h>
13 #include <linux/mman.h>
17 #include <linux/capability.h>
21 #include <linux/personality.h>
25 #include <linux/export.h>
27 #include <linux/mempolicy.h>
30 #include <linux/perf_event.h>
31 #include <linux/audit.h>
35 #include <asm/uaccess.h>
36 #include <asm/cacheflush.h>
38 #include <asm/mmu_context.h>
42 #ifndef arch_mmap_check
43 #define arch_mmap_check(addr, len, flags) (0)
46 #ifndef arch_rebalance_pgtables
47 #define arch_rebalance_pgtables(addr, len) (addr)
50 static void unmap_region(
struct mm_struct *mm,
52 unsigned long start,
unsigned long end);
77 (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)]) |
109 unsigned long free, allowed;
111 vm_acct_memory(pages);
129 free -= global_page_state(
NR_SHMEM);
144 if (free <= totalreserve_pages)
147 free -= totalreserve_pages;
167 allowed -= allowed / 32;
178 vm_unacct_memory(pages);
198 vma_interval_tree_remove(vma, &mapping->
i_mmap);
208 struct file *file = vma->
vm_file;
213 __remove_shared_vm_struct(vma, file, mapping);
235 static unsigned long do_brk(
unsigned long addr,
unsigned long len);
239 unsigned long rlim,
retval;
240 unsigned long newbrk, oldbrk;
242 unsigned long min_brk;
246 #ifdef CONFIG_COMPAT_BRK
275 if (oldbrk == newbrk)
279 if (brk <= mm->
brk) {
280 if (!
do_munmap(mm, newbrk, oldbrk-newbrk))
286 if (find_vma_intersection(mm, oldbrk, newbrk+
PAGE_SIZE))
290 if (do_brk(oldbrk, newbrk-oldbrk) != oldbrk)
300 #ifdef CONFIG_DEBUG_VM_RB
301 static int browse_rb(
struct rb_root *root)
322 for (nd = pn; nd; nd =
rb_prev(nd)) {
326 printk(
"backwards %d, forwards %d\n",
j, i), i = 0;
337 vma_lock_anon_vma(vma);
339 anon_vma_interval_tree_verify(avc);
340 vma_unlock_anon_vma(vma);
344 if (i != mm->map_count)
345 printk("map_count %
d vm_next %
d\
n", mm->map_count, i), bug = 1;
346 i = browse_rb(&mm->mm_rb);
347 if (i != mm->map_count)
348 printk("map_count %
d rb %
d\n", mm->map_count, i), bug = 1;
352 #define validate_mm(mm) do { } while (0)
379 anon_vma_interval_tree_post_update_vma(
struct vm_area_struct *vma)
393 __rb_link = &mm->mm_rb.rb_node;
394 rb_prev = __rb_parent =
NULL;
399 __rb_parent = *__rb_link;
402 if (vma_tmp->
vm_end > addr) {
406 __rb_link = &__rb_parent->
rb_left;
416 *rb_link = __rb_link;
424 rb_link_node(&vma->
vm_rb, rb_parent, rb_link);
445 vma_interval_tree_insert(vma, &mapping->
i_mmap);
466 mapping = vma->
vm_file->f_mapping;
471 __vma_link(mm, vma, prev, rb_link, rb_parent);
472 __vma_link_file(vma);
491 &prev, &rb_link, &rb_parent))
493 __vma_link(mm, vma, prev, rb_link, rb_parent);
525 struct rb_root *root =
NULL;
527 struct file *file = vma->
vm_file;
528 long adjust_next = 0;
531 if (next && !insert) {
534 if (end >= next->
vm_end) {
539 again: remove_next = 1 + (end > next->
vm_end);
551 }
else if (end < vma->
vm_end) {
576 if (!(vma->
vm_flags & VM_NONLINEAR)) {
593 __vma_link_file(insert);
597 vma_adjust_trans_huge(vma, start, end, adjust_next);
600 if (!anon_vma && adjust_next)
605 anon_vma_lock(anon_vma);
606 anon_vma_interval_tree_pre_update_vma(vma);
608 anon_vma_interval_tree_pre_update_vma(next);
613 vma_interval_tree_remove(vma, root);
615 vma_interval_tree_remove(next, root);
628 vma_interval_tree_insert(next, root);
629 vma_interval_tree_insert(vma, root);
638 __vma_unlink(mm, next, vma);
640 __remove_shared_vm_struct(next, file, mapping);
647 __insert_vm_struct(mm, insert);
651 anon_vma_interval_tree_post_update_vma(vma);
653 anon_vma_interval_tree_post_update_vma(next);
654 anon_vma_unlock(anon_vma);
672 anon_vma_merge(vma, next);
681 if (remove_next == 2) {
699 struct file *file,
unsigned long vm_flags)
710 static inline int is_mergeable_anon_vma(
struct anon_vma *anon_vma1,
718 if ((!anon_vma1 || !anon_vma2) && (!vma ||
721 return anon_vma1 == anon_vma2;
736 can_vma_merge_before(
struct vm_area_struct *vma,
unsigned long vm_flags,
739 if (is_mergeable_vma(vma, file, vm_flags) &&
740 is_mergeable_anon_vma(anon_vma, vma->
anon_vma, vma)) {
755 can_vma_merge_after(
struct vm_area_struct *vma,
unsigned long vm_flags,
756 struct anon_vma *anon_vma,
struct file *file,
pgoff_t vm_pgoff)
758 if (is_mergeable_vma(vma, file, vm_flags) &&
759 is_mergeable_anon_vma(anon_vma, vma->
anon_vma, vma)) {
762 if (vma->
vm_pgoff + vm_pglen == vm_pgoff)
799 unsigned long end,
unsigned long vm_flags,
800 struct anon_vma *anon_vma,
struct file *file,
811 if (vm_flags & VM_SPECIAL)
819 if (next && next->
vm_end == end)
825 if (prev && prev->
vm_end == addr &&
827 can_vma_merge_after(prev, vm_flags,
828 anon_vma, file, pgoff)) {
832 if (next && end == next->
vm_start &&
834 can_vma_merge_before(next, vm_flags,
835 anon_vma, file, pgoff+pglen) &&
836 is_mergeable_anon_vma(prev->
anon_vma,
853 if (next && end == next->
vm_start &&
855 can_vma_merge_before(next, vm_flags,
856 anon_vma, file, pgoff+pglen)) {
857 if (prev && addr < prev->
vm_end)
918 if (anon_vma_compatible(a, b)) {
937 struct anon_vma *anon_vma;
944 anon_vma = reusable_anon_vma(near, vma, near);
952 anon_vma = reusable_anon_vma(near, near, vma);
967 #ifdef CONFIG_PROC_FS
969 struct file *file,
long pages)
971 const unsigned long stack_flags
972 = VM_STACK_FLAGS & (VM_GROWSUP|VM_GROWSDOWN);
978 if ((flags & (VM_EXEC|VM_WRITE)) == VM_EXEC)
980 }
else if (flags & stack_flags)
989 static inline unsigned long round_hint_to_min(
unsigned long hint)
992 if (((
void *)hint !=
NULL) &&
1003 unsigned long len,
unsigned long prot,
1004 unsigned long flags,
unsigned long pgoff)
1024 addr = round_hint_to_min(addr);
1050 vm_flags = calc_vm_prot_bits(prot) | calc_vm_flag_bits(flags) |
1051 mm->
def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC;
1058 if (vm_flags & VM_LOCKED) {
1059 unsigned long locked, lock_limit;
1068 inode = file ? file->
f_path.dentry->d_inode :
NULL;
1086 if (locks_verify_locked(inode))
1089 vm_flags |= VM_SHARED | VM_MAYSHARE;
1091 vm_flags &= ~(VM_MAYWRITE | VM_SHARED);
1098 if (vm_flags & VM_EXEC)
1100 vm_flags &= ~VM_MAYEXEC;
1103 if (!file->
f_op || !file->
f_op->mmap)
1117 vm_flags |= VM_SHARED | VM_MAYSHARE;
1130 return mmap_region(file, addr, len, flags, vm_flags, pgoff);
1134 unsigned long, prot,
unsigned long, flags,
1135 unsigned long,
fd,
unsigned long, pgoff)
1137 struct file *file =
NULL;
1141 audit_mmap_fd(
fd, flags);
1156 VM_NORESERVE, &user,
1159 return PTR_ERR(file);
1171 #ifdef __ARCH_WANT_SYS_OLD_MMAP
1172 struct mmap_arg_struct {
1176 unsigned long flags;
1183 struct mmap_arg_struct a;
1206 if ((vm_flags & (VM_WRITE|VM_SHARED)) != ((VM_WRITE|VM_SHARED)))
1219 if (vm_flags & VM_PFNMAP)
1224 mapping_cap_account_dirty(vma->
vm_file->f_mapping);
1231 static inline int accountable_mapping(
struct file *file,
vm_flags_t vm_flags)
1240 return (vm_flags & (VM_NORESERVE | VM_SHARED | VM_WRITE)) == VM_WRITE;
1244 unsigned long len,
unsigned long flags,
1249 int correct_wcount = 0;
1252 unsigned long charged = 0;
1258 if (find_vma_links(mm, addr, addr + len, &prev, &rb_link, &rb_parent)) {
1275 vm_flags |= VM_NORESERVE;
1279 vm_flags |= VM_NORESERVE;
1285 if (accountable_mapping(file, vm_flags)) {
1289 vm_flags |= VM_ACCOUNT;
1312 vma->
vm_end = addr + len;
1321 if (vm_flags & (VM_GROWSDOWN|VM_GROWSUP))
1323 if (vm_flags & VM_DENYWRITE) {
1324 error = deny_write_access(file);
1329 vma->
vm_file = get_file(file);
1330 error = file->
f_op->mmap(file, vma);
1332 goto unmap_and_free_vma;
1342 }
else if (vm_flags & VM_SHARED) {
1343 if (
unlikely(vm_flags & (VM_GROWSDOWN|VM_GROWSUP)))
1365 vma_link(mm, vma, prev, rb_link, rb_parent);
1374 vm_stat_account(mm, vm_flags, file, len >>
PAGE_SHIFT);
1375 if (vm_flags & VM_LOCKED) {
1399 vm_unacct_memory(charged);
1414 #ifndef HAVE_ARCH_UNMAPPED_AREA
1417 unsigned long len,
unsigned long pgoff,
unsigned long flags)
1433 (!vma || addr + len <= vma->
vm_start))
1459 if (!vma || addr + len <= vma->
vm_start) {
1486 #ifndef HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
1489 const unsigned long len,
const unsigned long pgoff,
1490 const unsigned long flags)
1508 (!vma || addr + len <= vma->vm_start))
1533 if (!vma || addr+len <= vma->vm_start)
1543 }
while (len < vma->vm_start);
1594 unsigned long pgoff,
unsigned long flags)
1596 unsigned long (*get_area)(
struct file *,
unsigned long,
1607 get_area =
current->mm->get_unmapped_area;
1608 if (file && file->
f_op && file->
f_op->get_unmapped_area)
1609 get_area = file->
f_op->get_unmapped_area;
1610 addr = get_area(file, addr, len, pgoff, flags);
1621 return error ? error :
addr;
1640 rb_node = mm->
mm_rb.rb_node;
1649 if (vma_tmp->
vm_end > addr) {
1693 static int acct_stack_growth(
struct vm_area_struct *vma,
unsigned long size,
unsigned long grow)
1697 unsigned long new_start;
1710 unsigned long limit;
1738 #if defined(CONFIG_STACK_GROWSUP) || defined(CONFIG_IA64)
1756 vma_lock_anon_vma(vma);
1767 vma_unlock_anon_vma(vma);
1773 if (address > vma->
vm_end) {
1774 unsigned long size, grow;
1781 error = acct_stack_growth(vma, size, grow);
1783 anon_vma_interval_tree_pre_update_vma(vma);
1785 anon_vma_interval_tree_post_update_vma(vma);
1790 vma_unlock_anon_vma(vma);
1801 unsigned long address)
1817 vma_lock_anon_vma(vma);
1827 unsigned long size, grow;
1833 if (grow <= vma->vm_pgoff) {
1834 error = acct_stack_growth(vma, size, grow);
1836 anon_vma_interval_tree_pre_update_vma(vma);
1839 anon_vma_interval_tree_post_update_vma(vma);
1844 vma_unlock_anon_vma(vma);
1850 #ifdef CONFIG_STACK_GROWSUP
1853 return expand_upwards(vma, address);
1863 if (vma && (vma->
vm_start <= addr))
1882 unsigned long start;
1890 if (!(vma->
vm_flags & VM_GROWSDOWN))
1910 unsigned long nr_accounted = 0;
1913 update_hiwater_vm(mm);
1915 long nrpages = vma_pages(vma);
1920 vma = remove_vma(vma);
1922 vm_unacct_memory(nr_accounted);
1931 static void unmap_region(
struct mm_struct *mm,
1933 unsigned long start,
unsigned long end)
1940 update_hiwater_rss(mm);
1959 insertion_point = (prev ? &prev->
vm_next : &mm->
mmap);
1966 }
while (vma && vma->
vm_start < end);
1967 *insertion_point = vma;
1975 mm->unmap_area(mm, addr);
1984 unsigned long addr,
int new_below)
1990 if (is_vm_hugetlb_page(vma) && (addr &
2001 INIT_LIST_HEAD(&new->anon_vma_chain);
2006 new->vm_start =
addr;
2021 get_file(new->vm_file);
2023 if (new->vm_ops && new->vm_ops->open)
2024 new->vm_ops->open(
new);
2028 ((addr - new->vm_start) >>
PAGE_SHIFT),
new);
2037 if (new->vm_ops && new->vm_ops->close)
2038 new->vm_ops->close(
new);
2055 unsigned long addr,
int new_below)
2060 return __split_vma(mm, vma, addr, new_below);
2109 error = __split_vma(mm, vma, start, 0);
2117 if (last && end > last->
vm_start) {
2118 int error = __split_vma(mm, last, end, 1);
2129 while (tmp && tmp->
vm_start < end) {
2132 munlock_vma_pages_all(tmp);
2141 detach_vmas_to_be_unmapped(mm, vma, prev, end);
2142 unmap_region(mm, vma, prev, start, end);
2145 remove_vma_list(mm, vma);
2168 static inline void verify_mm_writelocked(
struct mm_struct *mm)
2170 #ifdef CONFIG_DEBUG_VM
2183 static unsigned long do_brk(
unsigned long addr,
unsigned long len)
2187 unsigned long flags;
2206 unsigned long locked, lock_limit;
2219 verify_mm_writelocked(mm);
2225 if (find_vma_links(mm, addr, addr + len, &prev, &rb_link, &rb_parent)) {
2242 vma =
vma_merge(mm, prev, addr, addr + len, flags,
2252 vm_unacct_memory(len >> PAGE_SHIFT);
2259 vma->
vm_end = addr + len;
2263 vma_link(mm, vma, prev, rb_link, rb_parent);
2267 if (flags & VM_LOCKED) {
2274 unsigned long vm_brk(
unsigned long addr,
unsigned long len)
2280 ret = do_brk(addr, len);
2291 unsigned long nr_accounted = 0;
2294 mmu_notifier_release(mm);
2300 munlock_vma_pages_all(vma);
2327 nr_accounted += vma_pages(vma);
2328 vma = remove_vma(vma);
2330 vm_unacct_memory(nr_accounted);
2361 &prev, &rb_link, &rb_parent))
2363 if ((vma->
vm_flags & VM_ACCOUNT) &&
2367 vma_link(mm, vma, prev, rb_link, rb_parent);
2376 unsigned long addr,
unsigned long len,
pgoff_t pgoff,
2377 bool *need_rmap_locks)
2380 unsigned long vma_start = vma->
vm_start;
2385 bool faulted_in_anon_vma =
true;
2393 faulted_in_anon_vma =
false;
2396 if (find_vma_links(mm, addr, addr + len, &prev, &rb_link, &rb_parent))
2405 vma_start < new_vma->vm_end)) {
2419 *vmap = vma = new_vma;
2427 new_vma->
vm_end = addr + len;
2435 goto out_free_mempol;
2439 new_vma->
vm_ops->open(new_vma);
2440 vma_link(mm, new_vma, prev, rb_link, rb_parent);
2441 *need_rmap_locks =
false;
2464 if (cur + npages > lim)
2471 struct vm_fault *vmf)
2482 pgoff = vmf->pgoff - vma->
vm_pgoff;
2494 return VM_FAULT_SIGBUS;
2504 static const struct vm_operations_struct special_mapping_vmops = {
2505 .close = special_mapping_close,
2506 .fault = special_mapping_fault,
2519 unsigned long addr,
unsigned long len,
2520 unsigned long vm_flags,
struct page **pages)
2532 vma->
vm_end = addr + len;
2537 vma->
vm_ops = &special_mapping_vmops;
2557 static void vm_lock_anon_vma(
struct mm_struct *mm,
struct anon_vma *anon_vma)
2559 if (!
test_bit(0, (
unsigned long *) &anon_vma->
root->rb_root.rb_node)) {
2575 &anon_vma->
root->rb_root.rb_node))
2643 vm_lock_mapping(mm, vma->
vm_file->f_mapping);
2651 vm_lock_anon_vma(mm, avc->
anon_vma);
2661 static void vm_unlock_anon_vma(
struct anon_vma *anon_vma)
2663 if (
test_bit(0, (
unsigned long *) &anon_vma->
root->rb_root.rb_node)) {
2677 &anon_vma->
root->rb_root.rb_node))
2679 anon_vma_unlock(anon_vma);
2683 static void vm_unlock_mapping(
struct address_space *mapping)
2707 BUG_ON(!mutex_is_locked(&mm_all_locks_mutex));
2714 vm_unlock_mapping(vma->
vm_file->f_mapping);