1
2
3
4
5
6
7
8
9#include <linux/slab.h>
10#include <linux/backing-dev.h>
11#include <linux/mm.h>
12#include <linux/shm.h>
13#include <linux/mman.h>
14#include <linux/pagemap.h>
15#include <linux/swap.h>
16#include <linux/syscalls.h>
17#include <linux/capability.h>
18#include <linux/init.h>
19#include <linux/file.h>
20#include <linux/fs.h>
21#include <linux/personality.h>
22#include <linux/security.h>
23#include <linux/hugetlb.h>
24#include <linux/profile.h>
25#include <linux/export.h>
26#include <linux/mount.h>
27#include <linux/mempolicy.h>
28#include <linux/rmap.h>
29#include <linux/mmu_notifier.h>
30#include <linux/perf_event.h>
31#include <linux/audit.h>
32#include <linux/khugepaged.h>
33
34#include <asm/uaccess.h>
35#include <asm/cacheflush.h>
36#include <asm/tlb.h>
37#include <asm/mmu_context.h>
38
39#include "internal.h"
40
41#ifndef arch_mmap_check
42#define arch_mmap_check(addr, len, flags) (0)
43#endif
44
45#ifndef arch_rebalance_pgtables
46#define arch_rebalance_pgtables(addr, len) (addr)
47#endif
48
49static void unmap_region(struct mm_struct *mm,
50 struct vm_area_struct *vma, struct vm_area_struct *prev,
51 unsigned long start, unsigned long end);
52
53
54
55
56
57#undef DEBUG_MM_RB
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74pgprot_t protection_map[16] = {
75 __P000, __P001, __P010, __P011, __P100, __P101, __P110, __P111,
76 __S000, __S001, __S010, __S011, __S100, __S101, __S110, __S111
77};
78
79pgprot_t vm_get_page_prot(unsigned long vm_flags)
80{
81 return __pgprot(pgprot_val(protection_map[vm_flags &
82 (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)]) |
83 pgprot_val(arch_vm_get_page_prot(vm_flags)));
84}
85EXPORT_SYMBOL(vm_get_page_prot);
86
87int sysctl_overcommit_memory __read_mostly = OVERCOMMIT_GUESS;
88int sysctl_overcommit_ratio __read_mostly = 50;
89int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT;
90
91
92
93
94struct percpu_counter vm_committed_as ____cacheline_aligned_in_smp;
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin)
113{
114 unsigned long free, allowed;
115
116 vm_acct_memory(pages);
117
118
119
120
121 if (sysctl_overcommit_memory == OVERCOMMIT_ALWAYS)
122 return 0;
123
124 if (sysctl_overcommit_memory == OVERCOMMIT_GUESS) {
125 free = global_page_state(NR_FREE_PAGES);
126 free += global_page_state(NR_FILE_PAGES);
127
128
129
130
131
132
133
134 free -= global_page_state(NR_SHMEM);
135
136 free += nr_swap_pages;
137
138
139
140
141
142
143
144 free += global_page_state(NR_SLAB_RECLAIMABLE);
145
146
147
148
149 if (free <= totalreserve_pages)
150 goto error;
151 else
152 free -= totalreserve_pages;
153
154
155
156
157 if (!cap_sys_admin)
158 free -= free / 32;
159
160 if (free > pages)
161 return 0;
162
163 goto error;
164 }
165
166 allowed = (totalram_pages - hugetlb_total_pages())
167 * sysctl_overcommit_ratio / 100;
168
169
170
171 if (!cap_sys_admin)
172 allowed -= allowed / 32;
173 allowed += total_swap_pages;
174
175
176
177 if (mm)
178 allowed -= mm->total_vm / 32;
179
180 if (percpu_counter_read_positive(&vm_committed_as) < allowed)
181 return 0;
182error:
183 vm_unacct_memory(pages);
184
185 return -ENOMEM;
186}
187
188
189
190
191static void __remove_shared_vm_struct(struct vm_area_struct *vma,
192 struct file *file, struct address_space *mapping)
193{
194 if (vma->vm_flags & VM_DENYWRITE)
195 atomic_inc(&file->f_path.dentry->d_inode->i_writecount);
196 if (vma->vm_flags & VM_SHARED)
197 mapping->i_mmap_writable--;
198
199 flush_dcache_mmap_lock(mapping);
200 if (unlikely(vma->vm_flags & VM_NONLINEAR))
201 list_del_init(&vma->shared.vm_set.list);
202 else
203 vma_prio_tree_remove(vma, &mapping->i_mmap);
204 flush_dcache_mmap_unlock(mapping);
205}
206
207
208
209
210
211void unlink_file_vma(struct vm_area_struct *vma)
212{
213 struct file *file = vma->vm_file;
214
215 if (file) {
216 struct address_space *mapping = file->f_mapping;
217 mutex_lock(&mapping->i_mmap_mutex);
218 __remove_shared_vm_struct(vma, file, mapping);
219 mutex_unlock(&mapping->i_mmap_mutex);
220 }
221}
222
223
224
225
226static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
227{
228 struct vm_area_struct *next = vma->vm_next;
229
230 might_sleep();
231 if (vma->vm_ops && vma->vm_ops->close)
232 vma->vm_ops->close(vma);
233 if (vma->vm_file) {
234 fput(vma->vm_file);
235 if (vma->vm_flags & VM_EXECUTABLE)
236 removed_exe_file_vma(vma->vm_mm);
237 }
238 mpol_put(vma_policy(vma));
239 kmem_cache_free(vm_area_cachep, vma);
240 return next;
241}
242
243SYSCALL_DEFINE1(brk, unsigned long, brk)
244{
245 unsigned long rlim, retval;
246 unsigned long newbrk, oldbrk;
247 struct mm_struct *mm = current->mm;
248 unsigned long min_brk;
249
250 down_write(&mm->mmap_sem);
251
252#ifdef CONFIG_COMPAT_BRK
253
254
255
256
257
258 if (current->brk_randomized)
259 min_brk = mm->start_brk;
260 else
261 min_brk = mm->end_data;
262#else
263 min_brk = mm->start_brk;
264#endif
265 if (brk < min_brk)
266 goto out;
267
268
269
270
271
272
273
274 rlim = rlimit(RLIMIT_DATA);
275 if (rlim < RLIM_INFINITY && (brk - mm->start_brk) +
276 (mm->end_data - mm->start_data) > rlim)
277 goto out;
278
279 newbrk = PAGE_ALIGN(brk);
280 oldbrk = PAGE_ALIGN(mm->brk);
281 if (oldbrk == newbrk)
282 goto set_brk;
283
284
285 if (brk <= mm->brk) {
286 if (!do_munmap(mm, newbrk, oldbrk-newbrk))
287 goto set_brk;
288 goto out;
289 }
290
291
292 if (find_vma_intersection(mm, oldbrk, newbrk+PAGE_SIZE))
293 goto out;
294
295
296 if (do_brk(oldbrk, newbrk-oldbrk) != oldbrk)
297 goto out;
298set_brk:
299 mm->brk = brk;
300out:
301 retval = mm->brk;
302 up_write(&mm->mmap_sem);
303 return retval;
304}
305
306#ifdef DEBUG_MM_RB
307static int browse_rb(struct rb_root *root)
308{
309 int i = 0, j;
310 struct rb_node *nd, *pn = NULL;
311 unsigned long prev = 0, pend = 0;
312
313 for (nd = rb_first(root); nd; nd = rb_next(nd)) {
314 struct vm_area_struct *vma;
315 vma = rb_entry(nd, struct vm_area_struct, vm_rb);
316 if (vma->vm_start < prev)
317 printk("vm_start %lx prev %lx\n", vma->vm_start, prev), i = -1;
318 if (vma->vm_start < pend)
319 printk("vm_start %lx pend %lx\n", vma->vm_start, pend);
320 if (vma->vm_start > vma->vm_end)
321 printk("vm_end %lx < vm_start %lx\n", vma->vm_end, vma->vm_start);
322 i++;
323 pn = nd;
324 prev = vma->vm_start;
325 pend = vma->vm_end;
326 }
327 j = 0;
328 for (nd = pn; nd; nd = rb_prev(nd)) {
329 j++;
330 }
331 if (i != j)
332 printk("backwards %d, forwards %d\n", j, i), i = 0;
333 return i;
334}
335
336void validate_mm(struct mm_struct *mm)
337{
338 int bug = 0;
339 int i = 0;
340 struct vm_area_struct *tmp = mm->mmap;
341 while (tmp) {
342 tmp = tmp->vm_next;
343 i++;
344 }
345 if (i != mm->map_count)
346 printk("map_count %d vm_next %d\n", mm->map_count, i), bug = 1;
347 i = browse_rb(&mm->mm_rb);
348 if (i != mm->map_count)
349 printk("map_count %d rb %d\n", mm->map_count, i), bug = 1;
350 BUG_ON(bug);
351}
352#else
353#define validate_mm(mm) do { } while (0)
354#endif
355
356static struct vm_area_struct *
357find_vma_prepare(struct mm_struct *mm, unsigned long addr,
358 struct vm_area_struct **pprev, struct rb_node ***rb_link,
359 struct rb_node ** rb_parent)
360{
361 struct vm_area_struct * vma;
362 struct rb_node ** __rb_link, * __rb_parent, * rb_prev;
363
364 __rb_link = &mm->mm_rb.rb_node;
365 rb_prev = __rb_parent = NULL;
366 vma = NULL;
367
368 while (*__rb_link) {
369 struct vm_area_struct *vma_tmp;
370
371 __rb_parent = *__rb_link;
372 vma_tmp = rb_entry(__rb_parent, struct vm_area_struct, vm_rb);
373
374 if (vma_tmp->vm_end > addr) {
375 vma = vma_tmp;
376 if (vma_tmp->vm_start <= addr)
377 break;
378 __rb_link = &__rb_parent->rb_left;
379 } else {
380 rb_prev = __rb_parent;
381 __rb_link = &__rb_parent->rb_right;
382 }
383 }
384
385 *pprev = NULL;
386 if (rb_prev)
387 *pprev = rb_entry(rb_prev, struct vm_area_struct, vm_rb);
388 *rb_link = __rb_link;
389 *rb_parent = __rb_parent;
390 return vma;
391}
392
393void __vma_link_rb(struct mm_struct *mm, struct vm_area_struct *vma,
394 struct rb_node **rb_link, struct rb_node *rb_parent)
395{
396 rb_link_node(&vma->vm_rb, rb_parent, rb_link);
397 rb_insert_color(&vma->vm_rb, &mm->mm_rb);
398}
399
400static void __vma_link_file(struct vm_area_struct *vma)
401{
402 struct file *file;
403
404 file = vma->vm_file;
405 if (file) {
406 struct address_space *mapping = file->f_mapping;
407
408 if (vma->vm_flags & VM_DENYWRITE)
409 atomic_dec(&file->f_path.dentry->d_inode->i_writecount);
410 if (vma->vm_flags & VM_SHARED)
411 mapping->i_mmap_writable++;
412
413 flush_dcache_mmap_lock(mapping);
414 if (unlikely(vma->vm_flags & VM_NONLINEAR))
415 vma_nonlinear_insert(vma, &mapping->i_mmap_nonlinear);
416 else
417 vma_prio_tree_insert(vma, &mapping->i_mmap);
418 flush_dcache_mmap_unlock(mapping);
419 }
420}
421
422static void
423__vma_link(struct mm_struct *mm, struct vm_area_struct *vma,
424 struct vm_area_struct *prev, struct rb_node **rb_link,
425 struct rb_node *rb_parent)
426{
427 __vma_link_list(mm, vma, prev, rb_parent);
428 __vma_link_rb(mm, vma, rb_link, rb_parent);
429}
430
431static void vma_link(struct mm_struct *mm, struct vm_area_struct *vma,
432 struct vm_area_struct *prev, struct rb_node **rb_link,
433 struct rb_node *rb_parent)
434{
435 struct address_space *mapping = NULL;
436
437 if (vma->vm_file)
438 mapping = vma->vm_file->f_mapping;
439
440 if (mapping)
441 mutex_lock(&mapping->i_mmap_mutex);
442
443 __vma_link(mm, vma, prev, rb_link, rb_parent);
444 __vma_link_file(vma);
445
446 if (mapping)
447 mutex_unlock(&mapping->i_mmap_mutex);
448
449 mm->map_count++;
450 validate_mm(mm);
451}
452
453
454
455
456
457
458static void __insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
459{
460 struct vm_area_struct *__vma, *prev;
461 struct rb_node **rb_link, *rb_parent;
462
463 __vma = find_vma_prepare(mm, vma->vm_start,&prev, &rb_link, &rb_parent);
464 BUG_ON(__vma && __vma->vm_start < vma->vm_end);
465 __vma_link(mm, vma, prev, rb_link, rb_parent);
466 mm->map_count++;
467}
468
469static inline void
470__vma_unlink(struct mm_struct *mm, struct vm_area_struct *vma,
471 struct vm_area_struct *prev)
472{
473 struct vm_area_struct *next = vma->vm_next;
474
475 prev->vm_next = next;
476 if (next)
477 next->vm_prev = prev;
478 rb_erase(&vma->vm_rb, &mm->mm_rb);
479 if (mm->mmap_cache == vma)
480 mm->mmap_cache = prev;
481}
482
483
484
485
486
487
488
489
490int vma_adjust(struct vm_area_struct *vma, unsigned long start,
491 unsigned long end, pgoff_t pgoff, struct vm_area_struct *insert)
492{
493 struct mm_struct *mm = vma->vm_mm;
494 struct vm_area_struct *next = vma->vm_next;
495 struct vm_area_struct *importer = NULL;
496 struct address_space *mapping = NULL;
497 struct prio_tree_root *root = NULL;
498 struct anon_vma *anon_vma = NULL;
499 struct file *file = vma->vm_file;
500 long adjust_next = 0;
501 int remove_next = 0;
502
503 if (next && !insert) {
504 struct vm_area_struct *exporter = NULL;
505
506 if (end >= next->vm_end) {
507
508
509
510
511again: remove_next = 1 + (end > next->vm_end);
512 end = next->vm_end;
513 exporter = next;
514 importer = vma;
515 } else if (end > next->vm_start) {
516
517
518
519
520 adjust_next = (end - next->vm_start) >> PAGE_SHIFT;
521 exporter = next;
522 importer = vma;
523 } else if (end < vma->vm_end) {
524
525
526
527
528
529 adjust_next = - ((vma->vm_end - end) >> PAGE_SHIFT);
530 exporter = vma;
531 importer = next;
532 }
533
534
535
536
537
538
539 if (exporter && exporter->anon_vma && !importer->anon_vma) {
540 if (anon_vma_clone(importer, exporter))
541 return -ENOMEM;
542 importer->anon_vma = exporter->anon_vma;
543 }
544 }
545
546 if (file) {
547 mapping = file->f_mapping;
548 if (!(vma->vm_flags & VM_NONLINEAR))
549 root = &mapping->i_mmap;
550 mutex_lock(&mapping->i_mmap_mutex);
551 if (insert) {
552
553
554
555
556
557
558 __vma_link_file(insert);
559 }
560 }
561
562 vma_adjust_trans_huge(vma, start, end, adjust_next);
563
564
565
566
567
568
569
570 if (vma->anon_vma && (importer || start != vma->vm_start)) {
571 anon_vma = vma->anon_vma;
572 anon_vma_lock(anon_vma);
573 }
574
575 if (root) {
576 flush_dcache_mmap_lock(mapping);
577 vma_prio_tree_remove(vma, root);
578 if (adjust_next)
579 vma_prio_tree_remove(next, root);
580 }
581
582 vma->vm_start = start;
583 vma->vm_end = end;
584 vma->vm_pgoff = pgoff;
585 if (adjust_next) {
586 next->vm_start += adjust_next << PAGE_SHIFT;
587 next->vm_pgoff += adjust_next;
588 }
589
590 if (root) {
591 if (adjust_next)
592 vma_prio_tree_insert(next, root);
593 vma_prio_tree_insert(vma, root);
594 flush_dcache_mmap_unlock(mapping);
595 }
596
597 if (remove_next) {
598
599
600
601
602 __vma_unlink(mm, next, vma);
603 if (file)
604 __remove_shared_vm_struct(next, file, mapping);
605 } else if (insert) {
606
607
608
609
610
611 __insert_vm_struct(mm, insert);
612 }
613
614 if (anon_vma)
615 anon_vma_unlock(anon_vma);
616 if (mapping)
617 mutex_unlock(&mapping->i_mmap_mutex);
618
619 if (remove_next) {
620 if (file) {
621 fput(file);
622 if (next->vm_flags & VM_EXECUTABLE)
623 removed_exe_file_vma(mm);
624 }
625 if (next->anon_vma)
626 anon_vma_merge(vma, next);
627 mm->map_count--;
628 mpol_put(vma_policy(next));
629 kmem_cache_free(vm_area_cachep, next);
630
631
632
633
634
635 if (remove_next == 2) {
636 next = vma->vm_next;
637 goto again;
638 }
639 }
640
641 validate_mm(mm);
642
643 return 0;
644}
645
646
647
648
649
650static inline int is_mergeable_vma(struct vm_area_struct *vma,
651 struct file *file, unsigned long vm_flags)
652{
653
654 if ((vma->vm_flags ^ vm_flags) & ~VM_CAN_NONLINEAR)
655 return 0;
656 if (vma->vm_file != file)
657 return 0;
658 if (vma->vm_ops && vma->vm_ops->close)
659 return 0;
660 return 1;
661}
662
663static inline int is_mergeable_anon_vma(struct anon_vma *anon_vma1,
664 struct anon_vma *anon_vma2,
665 struct vm_area_struct *vma)
666{
667
668
669
670
671 if ((!anon_vma1 || !anon_vma2) && (!vma ||
672 list_is_singular(&vma->anon_vma_chain)))
673 return 1;
674 return anon_vma1 == anon_vma2;
675}
676
677
678
679
680
681
682
683
684
685
686
687
688static int
689can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags,
690 struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff)
691{
692 if (is_mergeable_vma(vma, file, vm_flags) &&
693 is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
694 if (vma->vm_pgoff == vm_pgoff)
695 return 1;
696 }
697 return 0;
698}
699
700
701
702
703
704
705
706
707static int
708can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags,
709 struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff)
710{
711 if (is_mergeable_vma(vma, file, vm_flags) &&
712 is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
713 pgoff_t vm_pglen;
714 vm_pglen = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
715 if (vma->vm_pgoff + vm_pglen == vm_pgoff)
716 return 1;
717 }
718 return 0;
719}
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750struct vm_area_struct *vma_merge(struct mm_struct *mm,
751 struct vm_area_struct *prev, unsigned long addr,
752 unsigned long end, unsigned long vm_flags,
753 struct anon_vma *anon_vma, struct file *file,
754 pgoff_t pgoff, struct mempolicy *policy)
755{
756 pgoff_t pglen = (end - addr) >> PAGE_SHIFT;
757 struct vm_area_struct *area, *next;
758 int err;
759
760
761
762
763
764 if (vm_flags & VM_SPECIAL)
765 return NULL;
766
767 if (prev)
768 next = prev->vm_next;
769 else
770 next = mm->mmap;
771 area = next;
772 if (next && next->vm_end == end)
773 next = next->vm_next;
774
775
776
777
778 if (prev && prev->vm_end == addr &&
779 mpol_equal(vma_policy(prev), policy) &&
780 can_vma_merge_after(prev, vm_flags,
781 anon_vma, file, pgoff)) {
782
783
784
785 if (next && end == next->vm_start &&
786 mpol_equal(policy, vma_policy(next)) &&
787 can_vma_merge_before(next, vm_flags,
788 anon_vma, file, pgoff+pglen) &&
789 is_mergeable_anon_vma(prev->anon_vma,
790 next->anon_vma, NULL)) {
791
792 err = vma_adjust(prev, prev->vm_start,
793 next->vm_end, prev->vm_pgoff, NULL);
794 } else
795 err = vma_adjust(prev, prev->vm_start,
796 end, prev->vm_pgoff, NULL);
797 if (err)
798 return NULL;
799 khugepaged_enter_vma_merge(prev);
800 return prev;
801 }
802
803
804
805
806 if (next && end == next->vm_start &&
807 mpol_equal(policy, vma_policy(next)) &&
808 can_vma_merge_before(next, vm_flags,
809 anon_vma, file, pgoff+pglen)) {
810 if (prev && addr < prev->vm_end)
811 err = vma_adjust(prev, prev->vm_start,
812 addr, prev->vm_pgoff, NULL);
813 else
814 err = vma_adjust(area, addr, next->vm_end,
815 next->vm_pgoff - pglen, NULL);
816 if (err)
817 return NULL;
818 khugepaged_enter_vma_merge(area);
819 return area;
820 }
821
822 return NULL;
823}
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838static int anon_vma_compatible(struct vm_area_struct *a, struct vm_area_struct *b)
839{
840 return a->vm_end == b->vm_start &&
841 mpol_equal(vma_policy(a), vma_policy(b)) &&
842 a->vm_file == b->vm_file &&
843 !((a->vm_flags ^ b->vm_flags) & ~(VM_READ|VM_WRITE|VM_EXEC)) &&
844 b->vm_pgoff == a->vm_pgoff + ((b->vm_start - a->vm_start) >> PAGE_SHIFT);
845}
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869static struct anon_vma *reusable_anon_vma(struct vm_area_struct *old, struct vm_area_struct *a, struct vm_area_struct *b)
870{
871 if (anon_vma_compatible(a, b)) {
872 struct anon_vma *anon_vma = ACCESS_ONCE(old->anon_vma);
873
874 if (anon_vma && list_is_singular(&old->anon_vma_chain))
875 return anon_vma;
876 }
877 return NULL;
878}
879
880
881
882
883
884
885
886
887
888struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *vma)
889{
890 struct anon_vma *anon_vma;
891 struct vm_area_struct *near;
892
893 near = vma->vm_next;
894 if (!near)
895 goto try_prev;
896
897 anon_vma = reusable_anon_vma(near, vma, near);
898 if (anon_vma)
899 return anon_vma;
900try_prev:
901 near = vma->vm_prev;
902 if (!near)
903 goto none;
904
905 anon_vma = reusable_anon_vma(near, near, vma);
906 if (anon_vma)
907 return anon_vma;
908none:
909
910
911
912
913
914
915
916
917 return NULL;
918}
919
920#ifdef CONFIG_PROC_FS
921void vm_stat_account(struct mm_struct *mm, unsigned long flags,
922 struct file *file, long pages)
923{
924 const unsigned long stack_flags
925 = VM_STACK_FLAGS & (VM_GROWSUP|VM_GROWSDOWN);
926
927 if (file) {
928 mm->shared_vm += pages;
929 if ((flags & (VM_EXEC|VM_WRITE)) == VM_EXEC)
930 mm->exec_vm += pages;
931 } else if (flags & stack_flags)
932 mm->stack_vm += pages;
933 if (flags & (VM_RESERVED|VM_IO))
934 mm->reserved_vm += pages;
935}
936#endif
937
938
939
940
941
942unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
943 unsigned long len, unsigned long prot,
944 unsigned long flags, unsigned long pgoff)
945{
946 struct mm_struct * mm = current->mm;
947 struct inode *inode;
948 vm_flags_t vm_flags;
949 int error;
950 unsigned long reqprot = prot;
951
952
953
954
955
956
957
958 if ((prot & PROT_READ) && (current->personality & READ_IMPLIES_EXEC))
959 if (!(file && (file->f_path.mnt->mnt_flags & MNT_NOEXEC)))
960 prot |= PROT_EXEC;
961
962 if (!len)
963 return -EINVAL;
964
965 if (!(flags & MAP_FIXED))
966 addr = round_hint_to_min(addr);
967
968
969 len = PAGE_ALIGN(len);
970 if (!len)
971 return -ENOMEM;
972
973
974 if ((pgoff + (len >> PAGE_SHIFT)) < pgoff)
975 return -EOVERFLOW;
976
977
978 if (mm->map_count > sysctl_max_map_count)
979 return -ENOMEM;
980
981
982
983
984 addr = get_unmapped_area(file, addr, len, pgoff, flags);
985 if (addr & ~PAGE_MASK)
986 return addr;
987
988
989
990
991
992 vm_flags = calc_vm_prot_bits(prot) | calc_vm_flag_bits(flags) |
993 mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC;
994
995 if (flags & MAP_LOCKED)
996 if (!can_do_mlock())
997 return -EPERM;
998
999
1000 if (vm_flags & VM_LOCKED) {
1001 unsigned long locked, lock_limit;
1002 locked = len >> PAGE_SHIFT;
1003 locked += mm->locked_vm;
1004 lock_limit = rlimit(RLIMIT_MEMLOCK);
1005 lock_limit >>= PAGE_SHIFT;
1006 if (locked > lock_limit && !capable(CAP_IPC_LOCK))
1007 return -EAGAIN;
1008 }
1009
1010 inode = file ? file->f_path.dentry->d_inode : NULL;
1011
1012 if (file) {
1013 switch (flags & MAP_TYPE) {
1014 case MAP_SHARED:
1015 if ((prot&PROT_WRITE) && !(file->f_mode&FMODE_WRITE))
1016 return -EACCES;
1017
1018
1019
1020
1021
1022 if (IS_APPEND(inode) && (file->f_mode & FMODE_WRITE))
1023 return -EACCES;
1024
1025
1026
1027
1028 if (locks_verify_locked(inode))
1029 return -EAGAIN;
1030
1031 vm_flags |= VM_SHARED | VM_MAYSHARE;
1032 if (!(file->f_mode & FMODE_WRITE))
1033 vm_flags &= ~(VM_MAYWRITE | VM_SHARED);
1034
1035
1036 case MAP_PRIVATE:
1037 if (!(file->f_mode & FMODE_READ))
1038 return -EACCES;
1039 if (file->f_path.mnt->mnt_flags & MNT_NOEXEC) {
1040 if (vm_flags & VM_EXEC)
1041 return -EPERM;
1042 vm_flags &= ~VM_MAYEXEC;
1043 }
1044
1045 if (!file->f_op || !file->f_op->mmap)
1046 return -ENODEV;
1047 break;
1048
1049 default:
1050 return -EINVAL;
1051 }
1052 } else {
1053 switch (flags & MAP_TYPE) {
1054 case MAP_SHARED:
1055
1056
1057
1058 pgoff = 0;
1059 vm_flags |= VM_SHARED | VM_MAYSHARE;
1060 break;
1061 case MAP_PRIVATE:
1062
1063
1064
1065 pgoff = addr >> PAGE_SHIFT;
1066 break;
1067 default:
1068 return -EINVAL;
1069 }
1070 }
1071
1072 error = security_file_mmap(file, reqprot, prot, flags, addr, 0);
1073 if (error)
1074 return error;
1075
1076 return mmap_region(file, addr, len, flags, vm_flags, pgoff);
1077}
1078EXPORT_SYMBOL(do_mmap_pgoff);
1079
1080SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len,
1081 unsigned long, prot, unsigned long, flags,
1082 unsigned long, fd, unsigned long, pgoff)
1083{
1084 struct file *file = NULL;
1085 unsigned long retval = -EBADF;
1086
1087 if (!(flags & MAP_ANONYMOUS)) {
1088 audit_mmap_fd(fd, flags);
1089 if (unlikely(flags & MAP_HUGETLB))
1090 return -EINVAL;
1091 file = fget(fd);
1092 if (!file)
1093 goto out;
1094 } else if (flags & MAP_HUGETLB) {
1095 struct user_struct *user = NULL;
1096
1097
1098
1099
1100
1101
1102 len = ALIGN(len, huge_page_size(&default_hstate));
1103 file = hugetlb_file_setup(HUGETLB_ANON_FILE, len, VM_NORESERVE,
1104 &user, HUGETLB_ANONHUGE_INODE);
1105 if (IS_ERR(file))
1106 return PTR_ERR(file);
1107 }
1108
1109 flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
1110
1111 down_write(¤t->mm->mmap_sem);
1112 retval = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);
1113 up_write(¤t->mm->mmap_sem);
1114
1115 if (file)
1116 fput(file);
1117out:
1118 return retval;
1119}
1120
1121#ifdef __ARCH_WANT_SYS_OLD_MMAP
1122struct mmap_arg_struct {
1123 unsigned long addr;
1124 unsigned long len;
1125 unsigned long prot;
1126 unsigned long flags;
1127 unsigned long fd;
1128 unsigned long offset;
1129};
1130
1131SYSCALL_DEFINE1(old_mmap, struct mmap_arg_struct __user *, arg)
1132{
1133 struct mmap_arg_struct a;
1134
1135 if (copy_from_user(&a, arg, sizeof(a)))
1136 return -EFAULT;
1137 if (a.offset & ~PAGE_MASK)
1138 return -EINVAL;
1139
1140 return sys_mmap_pgoff(a.addr, a.len, a.prot, a.flags, a.fd,
1141 a.offset >> PAGE_SHIFT);
1142}
1143#endif
1144
1145
1146
1147
1148
1149
1150
1151int vma_wants_writenotify(struct vm_area_struct *vma)
1152{
1153 vm_flags_t vm_flags = vma->vm_flags;
1154
1155
1156 if ((vm_flags & (VM_WRITE|VM_SHARED)) != ((VM_WRITE|VM_SHARED)))
1157 return 0;
1158
1159
1160 if (vma->vm_ops && vma->vm_ops->page_mkwrite)
1161 return 1;
1162
1163
1164 if (pgprot_val(vma->vm_page_prot) !=
1165 pgprot_val(vm_get_page_prot(vm_flags)))
1166 return 0;
1167
1168
1169 if (vm_flags & (VM_PFNMAP|VM_INSERTPAGE))
1170 return 0;
1171
1172
1173 return vma->vm_file && vma->vm_file->f_mapping &&
1174 mapping_cap_account_dirty(vma->vm_file->f_mapping);
1175}
1176
1177
1178
1179
1180
1181static inline int accountable_mapping(struct file *file, vm_flags_t vm_flags)
1182{
1183
1184
1185
1186
1187 if (file && is_file_hugepages(file))
1188 return 0;
1189
1190 return (vm_flags & (VM_NORESERVE | VM_SHARED | VM_WRITE)) == VM_WRITE;
1191}
1192
1193unsigned long mmap_region(struct file *file, unsigned long addr,
1194 unsigned long len, unsigned long flags,
1195 vm_flags_t vm_flags, unsigned long pgoff)
1196{
1197 struct mm_struct *mm = current->mm;
1198 struct vm_area_struct *vma, *prev;
1199 int correct_wcount = 0;
1200 int error;
1201 struct rb_node **rb_link, *rb_parent;
1202 unsigned long charged = 0;
1203 struct inode *inode = file ? file->f_path.dentry->d_inode : NULL;
1204
1205
1206 error = -ENOMEM;
1207munmap_back:
1208 vma = find_vma_prepare(mm, addr, &prev, &rb_link, &rb_parent);
1209 if (vma && vma->vm_start < addr + len) {
1210 if (do_munmap(mm, addr, len))
1211 return -ENOMEM;
1212 goto munmap_back;
1213 }
1214
1215
1216 if (!may_expand_vm(mm, len >> PAGE_SHIFT))
1217 return -ENOMEM;
1218
1219
1220
1221
1222
1223 if ((flags & MAP_NORESERVE)) {
1224
1225 if (sysctl_overcommit_memory != OVERCOMMIT_NEVER)
1226 vm_flags |= VM_NORESERVE;
1227
1228
1229 if (file && is_file_hugepages(file))
1230 vm_flags |= VM_NORESERVE;
1231 }
1232
1233
1234
1235
1236 if (accountable_mapping(file, vm_flags)) {
1237 charged = len >> PAGE_SHIFT;
1238 if (security_vm_enough_memory(charged))
1239 return -ENOMEM;
1240 vm_flags |= VM_ACCOUNT;
1241 }
1242
1243
1244
1245
1246 vma = vma_merge(mm, prev, addr, addr + len, vm_flags, NULL, file, pgoff, NULL);
1247 if (vma)
1248 goto out;
1249
1250
1251
1252
1253
1254
1255 vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
1256 if (!vma) {
1257 error = -ENOMEM;
1258 goto unacct_error;
1259 }
1260
1261 vma->vm_mm = mm;
1262 vma->vm_start = addr;
1263 vma->vm_end = addr + len;
1264 vma->vm_flags = vm_flags;
1265 vma->vm_page_prot = vm_get_page_prot(vm_flags);
1266 vma->vm_pgoff = pgoff;
1267 INIT_LIST_HEAD(&vma->anon_vma_chain);
1268
1269 error = -EINVAL;
1270
1271 if (file) {
1272 if (vm_flags & (VM_GROWSDOWN|VM_GROWSUP))
1273 goto free_vma;
1274 if (vm_flags & VM_DENYWRITE) {
1275 error = deny_write_access(file);
1276 if (error)
1277 goto free_vma;
1278 correct_wcount = 1;
1279 }
1280 vma->vm_file = file;
1281 get_file(file);
1282 error = file->f_op->mmap(file, vma);
1283 if (error)
1284 goto unmap_and_free_vma;
1285 if (vm_flags & VM_EXECUTABLE)
1286 added_exe_file_vma(mm);
1287
1288
1289
1290
1291
1292
1293 addr = vma->vm_start;
1294 pgoff = vma->vm_pgoff;
1295 vm_flags = vma->vm_flags;
1296 } else if (vm_flags & VM_SHARED) {
1297 if (unlikely(vm_flags & (VM_GROWSDOWN|VM_GROWSUP)))
1298 goto free_vma;
1299 error = shmem_zero_setup(vma);
1300 if (error)
1301 goto free_vma;
1302 }
1303
1304 if (vma_wants_writenotify(vma)) {
1305 pgprot_t pprot = vma->vm_page_prot;
1306
1307
1308
1309
1310
1311
1312
1313
1314 vma->vm_page_prot = vm_get_page_prot(vm_flags & ~VM_SHARED);
1315 if (pgprot_val(pprot) == pgprot_val(pgprot_noncached(pprot)))
1316 vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
1317 }
1318
1319 vma_link(mm, vma, prev, rb_link, rb_parent);
1320 file = vma->vm_file;
1321
1322
1323 if (correct_wcount)
1324 atomic_inc(&inode->i_writecount);
1325out:
1326 perf_event_mmap(vma);
1327
1328 mm->total_vm += len >> PAGE_SHIFT;
1329 vm_stat_account(mm, vm_flags, file, len >> PAGE_SHIFT);
1330 if (vm_flags & VM_LOCKED) {
1331 if (!mlock_vma_pages_range(vma, addr, addr + len))
1332 mm->locked_vm += (len >> PAGE_SHIFT);
1333 } else if ((flags & MAP_POPULATE) && !(flags & MAP_NONBLOCK))
1334 make_pages_present(addr, addr + len);
1335 return addr;
1336
1337unmap_and_free_vma:
1338 if (correct_wcount)
1339 atomic_inc(&inode->i_writecount);
1340 vma->vm_file = NULL;
1341 fput(file);
1342
1343
1344 unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end);
1345 charged = 0;
1346free_vma:
1347 kmem_cache_free(vm_area_cachep, vma);
1348unacct_error:
1349 if (charged)
1350 vm_unacct_memory(charged);
1351 return error;
1352}
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365#ifndef HAVE_ARCH_UNMAPPED_AREA
1366unsigned long
1367arch_get_unmapped_area(struct file *filp, unsigned long addr,
1368 unsigned long len, unsigned long pgoff, unsigned long flags)
1369{
1370 struct mm_struct *mm = current->mm;
1371 struct vm_area_struct *vma;
1372 unsigned long start_addr;
1373
1374 if (len > TASK_SIZE)
1375 return -ENOMEM;
1376
1377 if (flags & MAP_FIXED)
1378 return addr;
1379
1380 if (addr) {
1381 addr = PAGE_ALIGN(addr);
1382 vma = find_vma(mm, addr);
1383 if (TASK_SIZE - len >= addr &&
1384 (!vma || addr + len <= vma->vm_start))
1385 return addr;
1386 }
1387 if (len > mm->cached_hole_size) {
1388 start_addr = addr = mm->free_area_cache;
1389 } else {
1390 start_addr = addr = TASK_UNMAPPED_BASE;
1391 mm->cached_hole_size = 0;
1392 }
1393
1394full_search:
1395 for (vma = find_vma(mm, addr); ; vma = vma->vm_next) {
1396
1397 if (TASK_SIZE - len < addr) {
1398
1399
1400
1401
1402 if (start_addr != TASK_UNMAPPED_BASE) {
1403 addr = TASK_UNMAPPED_BASE;
1404 start_addr = addr;
1405 mm->cached_hole_size = 0;
1406 goto full_search;
1407 }
1408 return -ENOMEM;
1409 }
1410 if (!vma || addr + len <= vma->vm_start) {
1411
1412
1413
1414 mm->free_area_cache = addr + len;
1415 return addr;
1416 }
1417 if (addr + mm->cached_hole_size < vma->vm_start)
1418 mm->cached_hole_size = vma->vm_start - addr;
1419 addr = vma->vm_end;
1420 }
1421}
1422#endif
1423
1424void arch_unmap_area(struct mm_struct *mm, unsigned long addr)
1425{
1426
1427
1428
1429 if (addr >= TASK_UNMAPPED_BASE && addr < mm->free_area_cache) {
1430 mm->free_area_cache = addr;
1431 mm->cached_hole_size = ~0UL;
1432 }
1433}
1434
1435
1436
1437
1438
1439#ifndef HAVE_ARCH_UNMAPPED_AREA_TOPDOWN
1440unsigned long
1441arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
1442 const unsigned long len, const unsigned long pgoff,
1443 const unsigned long flags)
1444{
1445 struct vm_area_struct *vma;
1446 struct mm_struct *mm = current->mm;
1447 unsigned long addr = addr0;
1448
1449
1450 if (len > TASK_SIZE)
1451 return -ENOMEM;
1452
1453 if (flags & MAP_FIXED)
1454 return addr;
1455
1456
1457 if (addr) {
1458 addr = PAGE_ALIGN(addr);
1459 vma = find_vma(mm, addr);
1460 if (TASK_SIZE - len >= addr &&
1461 (!vma || addr + len <= vma->vm_start))
1462 return addr;
1463 }
1464
1465
1466 if (len <= mm->cached_hole_size) {
1467 mm->cached_hole_size = 0;
1468 mm->free_area_cache = mm->mmap_base;
1469 }
1470
1471
1472 addr = mm->free_area_cache;
1473
1474
1475 if (addr > len) {
1476 vma = find_vma(mm, addr-len);
1477 if (!vma || addr <= vma->vm_start)
1478
1479 return (mm->free_area_cache = addr-len);
1480 }
1481
1482 if (mm->mmap_base < len)
1483 goto bottomup;
1484
1485 addr = mm->mmap_base-len;
1486
1487 do {
1488
1489
1490
1491
1492
1493 vma = find_vma(mm, addr);
1494 if (!vma || addr+len <= vma->vm_start)
1495
1496 return (mm->free_area_cache = addr);
1497
1498
1499 if (addr + mm->cached_hole_size < vma->vm_start)
1500 mm->cached_hole_size = vma->vm_start - addr;
1501
1502
1503 addr = vma->vm_start-len;
1504 } while (len < vma->vm_start);
1505
1506bottomup:
1507
1508
1509
1510
1511
1512
1513 mm->cached_hole_size = ~0UL;
1514 mm->free_area_cache = TASK_UNMAPPED_BASE;
1515 addr = arch_get_unmapped_area(filp, addr0, len, pgoff, flags);
1516
1517
1518
1519 mm->free_area_cache = mm->mmap_base;
1520 mm->cached_hole_size = ~0UL;
1521
1522 return addr;
1523}
1524#endif
1525
1526void arch_unmap_area_topdown(struct mm_struct *mm, unsigned long addr)
1527{
1528
1529
1530
1531 if (addr > mm->free_area_cache)
1532 mm->free_area_cache = addr;
1533
1534
1535 if (mm->free_area_cache > mm->mmap_base)
1536 mm->free_area_cache = mm->mmap_base;
1537}
1538
1539unsigned long
1540get_unmapped_area(struct file *file, unsigned long addr, unsigned long len,
1541 unsigned long pgoff, unsigned long flags)
1542{
1543 unsigned long (*get_area)(struct file *, unsigned long,
1544 unsigned long, unsigned long, unsigned long);
1545
1546 unsigned long error = arch_mmap_check(addr, len, flags);
1547 if (error)
1548 return error;
1549
1550
1551 if (len > TASK_SIZE)
1552 return -ENOMEM;
1553
1554 get_area = current->mm->get_unmapped_area;
1555 if (file && file->f_op && file->f_op->get_unmapped_area)
1556 get_area = file->f_op->get_unmapped_area;
1557 addr = get_area(file, addr, len, pgoff, flags);
1558 if (IS_ERR_VALUE(addr))
1559 return addr;
1560
1561 if (addr > TASK_SIZE - len)
1562 return -ENOMEM;
1563 if (addr & ~PAGE_MASK)
1564 return -EINVAL;
1565
1566 return arch_rebalance_pgtables(addr, len);
1567}
1568
1569EXPORT_SYMBOL(get_unmapped_area);
1570
1571
1572struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)
1573{
1574 struct vm_area_struct *vma = NULL;
1575
1576 if (mm) {
1577
1578
1579 vma = mm->mmap_cache;
1580 if (!(vma && vma->vm_end > addr && vma->vm_start <= addr)) {
1581 struct rb_node * rb_node;
1582
1583 rb_node = mm->mm_rb.rb_node;
1584 vma = NULL;
1585
1586 while (rb_node) {
1587 struct vm_area_struct * vma_tmp;
1588
1589 vma_tmp = rb_entry(rb_node,
1590 struct vm_area_struct, vm_rb);
1591
1592 if (vma_tmp->vm_end > addr) {
1593 vma = vma_tmp;
1594 if (vma_tmp->vm_start <= addr)
1595 break;
1596 rb_node = rb_node->rb_left;
1597 } else
1598 rb_node = rb_node->rb_right;
1599 }
1600 if (vma)
1601 mm->mmap_cache = vma;
1602 }
1603 }
1604 return vma;
1605}
1606
1607EXPORT_SYMBOL(find_vma);
1608
1609
1610
1611
1612struct vm_area_struct *
1613find_vma_prev(struct mm_struct *mm, unsigned long addr,
1614 struct vm_area_struct **pprev)
1615{
1616 struct vm_area_struct *vma;
1617
1618 vma = find_vma(mm, addr);
1619 if (vma) {
1620 *pprev = vma->vm_prev;
1621 } else {
1622 struct rb_node *rb_node = mm->mm_rb.rb_node;
1623 *pprev = NULL;
1624 while (rb_node) {
1625 *pprev = rb_entry(rb_node, struct vm_area_struct, vm_rb);
1626 rb_node = rb_node->rb_right;
1627 }
1628 }
1629 return vma;
1630}
1631
1632
1633
1634
1635
1636
1637static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, unsigned long grow)
1638{
1639 struct mm_struct *mm = vma->vm_mm;
1640 struct rlimit *rlim = current->signal->rlim;
1641 unsigned long new_start;
1642
1643
1644 if (!may_expand_vm(mm, grow))
1645 return -ENOMEM;
1646
1647
1648 if (size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur))
1649 return -ENOMEM;
1650
1651
1652 if (vma->vm_flags & VM_LOCKED) {
1653 unsigned long locked;
1654 unsigned long limit;
1655 locked = mm->locked_vm + grow;
1656 limit = ACCESS_ONCE(rlim[RLIMIT_MEMLOCK].rlim_cur);
1657 limit >>= PAGE_SHIFT;
1658 if (locked > limit && !capable(CAP_IPC_LOCK))
1659 return -ENOMEM;
1660 }
1661
1662
1663 new_start = (vma->vm_flags & VM_GROWSUP) ? vma->vm_start :
1664 vma->vm_end - size;
1665 if (is_hugepage_only_range(vma->vm_mm, new_start, size))
1666 return -EFAULT;
1667
1668
1669
1670
1671
1672 if (security_vm_enough_memory_mm(mm, grow))
1673 return -ENOMEM;
1674
1675
1676 mm->total_vm += grow;
1677 if (vma->vm_flags & VM_LOCKED)
1678 mm->locked_vm += grow;
1679 vm_stat_account(mm, vma->vm_flags, vma->vm_file, grow);
1680 return 0;
1681}
1682
1683#if defined(CONFIG_STACK_GROWSUP) || defined(CONFIG_IA64)
1684
1685
1686
1687
1688int expand_upwards(struct vm_area_struct *vma, unsigned long address)
1689{
1690 int error;
1691
1692 if (!(vma->vm_flags & VM_GROWSUP))
1693 return -EFAULT;
1694
1695
1696
1697
1698
1699 if (unlikely(anon_vma_prepare(vma)))
1700 return -ENOMEM;
1701 vma_lock_anon_vma(vma);
1702
1703
1704
1705
1706
1707
1708
1709 if (address < PAGE_ALIGN(address+4))
1710 address = PAGE_ALIGN(address+4);
1711 else {
1712 vma_unlock_anon_vma(vma);
1713 return -ENOMEM;
1714 }
1715 error = 0;
1716
1717
1718 if (address > vma->vm_end) {
1719 unsigned long size, grow;
1720
1721 size = address - vma->vm_start;
1722 grow = (address - vma->vm_end) >> PAGE_SHIFT;
1723
1724 error = -ENOMEM;
1725 if (vma->vm_pgoff + (size >> PAGE_SHIFT) >= vma->vm_pgoff) {
1726 error = acct_stack_growth(vma, size, grow);
1727 if (!error) {
1728 vma->vm_end = address;
1729 perf_event_mmap(vma);
1730 }
1731 }
1732 }
1733 vma_unlock_anon_vma(vma);
1734 khugepaged_enter_vma_merge(vma);
1735 return error;
1736}
1737#endif
1738
1739
1740
1741
1742int expand_downwards(struct vm_area_struct *vma,
1743 unsigned long address)
1744{
1745 int error;
1746
1747
1748
1749
1750
1751 if (unlikely(anon_vma_prepare(vma)))
1752 return -ENOMEM;
1753
1754 address &= PAGE_MASK;
1755 error = security_file_mmap(NULL, 0, 0, 0, address, 1);
1756 if (error)
1757 return error;
1758
1759 vma_lock_anon_vma(vma);
1760
1761
1762
1763
1764
1765
1766
1767
1768 if (address < vma->vm_start) {
1769 unsigned long size, grow;
1770
1771 size = vma->vm_end - address;
1772 grow = (vma->vm_start - address) >> PAGE_SHIFT;
1773
1774 error = -ENOMEM;
1775 if (grow <= vma->vm_pgoff) {
1776 error = acct_stack_growth(vma, size, grow);
1777 if (!error) {
1778 vma->vm_start = address;
1779 vma->vm_pgoff -= grow;
1780 perf_event_mmap(vma);
1781 }
1782 }
1783 }
1784 vma_unlock_anon_vma(vma);
1785 khugepaged_enter_vma_merge(vma);
1786 return error;
1787}
1788
1789#ifdef CONFIG_STACK_GROWSUP
1790int expand_stack(struct vm_area_struct *vma, unsigned long address)
1791{
1792 return expand_upwards(vma, address);
1793}
1794
1795struct vm_area_struct *
1796find_extend_vma(struct mm_struct *mm, unsigned long addr)
1797{
1798 struct vm_area_struct *vma, *prev;
1799
1800 addr &= PAGE_MASK;
1801 vma = find_vma_prev(mm, addr, &prev);
1802 if (vma && (vma->vm_start <= addr))
1803 return vma;
1804 if (!prev || expand_stack(prev, addr))
1805 return NULL;
1806 if (prev->vm_flags & VM_LOCKED) {
1807 mlock_vma_pages_range(prev, addr, prev->vm_end);
1808 }
1809 return prev;
1810}
1811#else
1812int expand_stack(struct vm_area_struct *vma, unsigned long address)
1813{
1814 return expand_downwards(vma, address);
1815}
1816
1817struct vm_area_struct *
1818find_extend_vma(struct mm_struct * mm, unsigned long addr)
1819{
1820 struct vm_area_struct * vma;
1821 unsigned long start;
1822
1823 addr &= PAGE_MASK;
1824 vma = find_vma(mm,addr);
1825 if (!vma)
1826 return NULL;
1827 if (vma->vm_start <= addr)
1828 return vma;
1829 if (!(vma->vm_flags & VM_GROWSDOWN))
1830 return NULL;
1831 start = vma->vm_start;
1832 if (expand_stack(vma, addr))
1833 return NULL;
1834 if (vma->vm_flags & VM_LOCKED) {
1835 mlock_vma_pages_range(vma, addr, start);
1836 }
1837 return vma;
1838}
1839#endif
1840
1841
1842
1843
1844
1845
1846
1847static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma)
1848{
1849
1850 update_hiwater_vm(mm);
1851 do {
1852 long nrpages = vma_pages(vma);
1853
1854 mm->total_vm -= nrpages;
1855 vm_stat_account(mm, vma->vm_flags, vma->vm_file, -nrpages);
1856 vma = remove_vma(vma);
1857 } while (vma);
1858 validate_mm(mm);
1859}
1860
1861
1862
1863
1864
1865
1866static void unmap_region(struct mm_struct *mm,
1867 struct vm_area_struct *vma, struct vm_area_struct *prev,
1868 unsigned long start, unsigned long end)
1869{
1870 struct vm_area_struct *next = prev? prev->vm_next: mm->mmap;
1871 struct mmu_gather tlb;
1872 unsigned long nr_accounted = 0;
1873
1874 lru_add_drain();
1875 tlb_gather_mmu(&tlb, mm, 0);
1876 update_hiwater_rss(mm);
1877 unmap_vmas(&tlb, vma, start, end, &nr_accounted, NULL);
1878 vm_unacct_memory(nr_accounted);
1879 free_pgtables(&tlb, vma, prev ? prev->vm_end : FIRST_USER_ADDRESS,
1880 next ? next->vm_start : 0);
1881 tlb_finish_mmu(&tlb, start, end);
1882}
1883
1884
1885
1886
1887
1888static void
1889detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma,
1890 struct vm_area_struct *prev, unsigned long end)
1891{
1892 struct vm_area_struct **insertion_point;
1893 struct vm_area_struct *tail_vma = NULL;
1894 unsigned long addr;
1895
1896 insertion_point = (prev ? &prev->vm_next : &mm->mmap);
1897 vma->vm_prev = NULL;
1898 do {
1899 rb_erase(&vma->vm_rb, &mm->mm_rb);
1900 mm->map_count--;
1901 tail_vma = vma;
1902 vma = vma->vm_next;
1903 } while (vma && vma->vm_start < end);
1904 *insertion_point = vma;
1905 if (vma)
1906 vma->vm_prev = prev;
1907 tail_vma->vm_next = NULL;
1908 if (mm->unmap_area == arch_unmap_area)
1909 addr = prev ? prev->vm_end : mm->mmap_base;
1910 else
1911 addr = vma ? vma->vm_start : mm->mmap_base;
1912 mm->unmap_area(mm, addr);
1913 mm->mmap_cache = NULL;
1914}
1915
1916
1917
1918
1919
1920static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
1921 unsigned long addr, int new_below)
1922{
1923 struct mempolicy *pol;
1924 struct vm_area_struct *new;
1925 int err = -ENOMEM;
1926
1927 if (is_vm_hugetlb_page(vma) && (addr &
1928 ~(huge_page_mask(hstate_vma(vma)))))
1929 return -EINVAL;
1930
1931 new = kmem_cache_alloc(vm_area_cachep, GFP_KERNEL);
1932 if (!new)
1933 goto out_err;
1934
1935
1936 *new = *vma;
1937
1938 INIT_LIST_HEAD(&new->anon_vma_chain);
1939
1940 if (new_below)
1941 new->vm_end = addr;
1942 else {
1943 new->vm_start = addr;
1944 new->vm_pgoff += ((addr - vma->vm_start) >> PAGE_SHIFT);
1945 }
1946
1947 pol = mpol_dup(vma_policy(vma));
1948 if (IS_ERR(pol)) {
1949 err = PTR_ERR(pol);
1950 goto out_free_vma;
1951 }
1952 vma_set_policy(new, pol);
1953
1954 if (anon_vma_clone(new, vma))
1955 goto out_free_mpol;
1956
1957 if (new->vm_file) {
1958 get_file(new->vm_file);
1959 if (vma->vm_flags & VM_EXECUTABLE)
1960 added_exe_file_vma(mm);
1961 }
1962
1963 if (new->vm_ops && new->vm_ops->open)
1964 new->vm_ops->open(new);
1965
1966 if (new_below)
1967 err = vma_adjust(vma, addr, vma->vm_end, vma->vm_pgoff +
1968 ((addr - new->vm_start) >> PAGE_SHIFT), new);
1969 else
1970 err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
1971
1972
1973 if (!err)
1974 return 0;
1975
1976
1977 if (new->vm_ops && new->vm_ops->close)
1978 new->vm_ops->close(new);
1979 if (new->vm_file) {
1980 if (vma->vm_flags & VM_EXECUTABLE)
1981 removed_exe_file_vma(mm);
1982 fput(new->vm_file);
1983 }
1984 unlink_anon_vmas(new);
1985 out_free_mpol:
1986 mpol_put(pol);
1987 out_free_vma:
1988 kmem_cache_free(vm_area_cachep, new);
1989 out_err:
1990 return err;
1991}
1992
1993
1994
1995
1996
1997int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
1998 unsigned long addr, int new_below)
1999{
2000 if (mm->map_count >= sysctl_max_map_count)
2001 return -ENOMEM;
2002
2003 return __split_vma(mm, vma, addr, new_below);
2004}
2005
2006
2007
2008
2009
2010
2011int do_munmap(struct mm_struct *mm, unsigned long start, size_t len)
2012{
2013 unsigned long end;
2014 struct vm_area_struct *vma, *prev, *last;
2015
2016 if ((start & ~PAGE_MASK) || start > TASK_SIZE || len > TASK_SIZE-start)
2017 return -EINVAL;
2018
2019 if ((len = PAGE_ALIGN(len)) == 0)
2020 return -EINVAL;
2021
2022
2023 vma = find_vma(mm, start);
2024 if (!vma)
2025 return 0;
2026 prev = vma->vm_prev;
2027
2028
2029
2030 end = start + len;
2031 if (vma->vm_start >= end)
2032 return 0;
2033
2034
2035
2036
2037
2038
2039
2040
2041 if (start > vma->vm_start) {
2042 int error;
2043
2044
2045
2046
2047
2048
2049 if (end < vma->vm_end && mm->map_count >= sysctl_max_map_count)
2050 return -ENOMEM;
2051
2052 error = __split_vma(mm, vma, start, 0);
2053 if (error)
2054 return error;
2055 prev = vma;
2056 }
2057
2058
2059 last = find_vma(mm, end);
2060 if (last && end > last->vm_start) {
2061 int error = __split_vma(mm, last, end, 1);
2062 if (error)
2063 return error;
2064 }
2065 vma = prev? prev->vm_next: mm->mmap;
2066
2067
2068
2069
2070 if (mm->locked_vm) {
2071 struct vm_area_struct *tmp = vma;
2072 while (tmp && tmp->vm_start < end) {
2073 if (tmp->vm_flags & VM_LOCKED) {
2074 mm->locked_vm -= vma_pages(tmp);
2075 munlock_vma_pages_all(tmp);
2076 }
2077 tmp = tmp->vm_next;
2078 }
2079 }
2080
2081
2082
2083
2084 detach_vmas_to_be_unmapped(mm, vma, prev, end);
2085 unmap_region(mm, vma, prev, start, end);
2086
2087
2088 remove_vma_list(mm, vma);
2089
2090 return 0;
2091}
2092
2093EXPORT_SYMBOL(do_munmap);
2094
2095SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len)
2096{
2097 int ret;
2098 struct mm_struct *mm = current->mm;
2099
2100 profile_munmap(addr);
2101
2102 down_write(&mm->mmap_sem);
2103 ret = do_munmap(mm, addr, len);
2104 up_write(&mm->mmap_sem);
2105 return ret;
2106}
2107
2108static inline void verify_mm_writelocked(struct mm_struct *mm)
2109{
2110#ifdef CONFIG_DEBUG_VM
2111 if (unlikely(down_read_trylock(&mm->mmap_sem))) {
2112 WARN_ON(1);
2113 up_read(&mm->mmap_sem);
2114 }
2115#endif
2116}
2117
2118
2119
2120
2121
2122
2123unsigned long do_brk(unsigned long addr, unsigned long len)
2124{
2125 struct mm_struct * mm = current->mm;
2126 struct vm_area_struct * vma, * prev;
2127 unsigned long flags;
2128 struct rb_node ** rb_link, * rb_parent;
2129 pgoff_t pgoff = addr >> PAGE_SHIFT;
2130 int error;
2131
2132 len = PAGE_ALIGN(len);
2133 if (!len)
2134 return addr;
2135
2136 error = security_file_mmap(NULL, 0, 0, 0, addr, 1);
2137 if (error)
2138 return error;
2139
2140 flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags;
2141
2142 error = get_unmapped_area(NULL, addr, len, 0, MAP_FIXED);
2143 if (error & ~PAGE_MASK)
2144 return error;
2145
2146
2147
2148
2149 if (mm->def_flags & VM_LOCKED) {
2150 unsigned long locked, lock_limit;
2151 locked = len >> PAGE_SHIFT;
2152 locked += mm->locked_vm;
2153 lock_limit = rlimit(RLIMIT_MEMLOCK);
2154 lock_limit >>= PAGE_SHIFT;
2155 if (locked > lock_limit && !capable(CAP_IPC_LOCK))
2156 return -EAGAIN;
2157 }
2158
2159
2160
2161
2162
2163 verify_mm_writelocked(mm);
2164
2165
2166
2167
2168 munmap_back:
2169 vma = find_vma_prepare(mm, addr, &prev, &rb_link, &rb_parent);
2170 if (vma && vma->vm_start < addr + len) {
2171 if (do_munmap(mm, addr, len))
2172 return -ENOMEM;
2173 goto munmap_back;
2174 }
2175
2176
2177 if (!may_expand_vm(mm, len >> PAGE_SHIFT))
2178 return -ENOMEM;
2179
2180 if (mm->map_count > sysctl_max_map_count)
2181 return -ENOMEM;
2182
2183 if (security_vm_enough_memory(len >> PAGE_SHIFT))
2184 return -ENOMEM;
2185
2186
2187 vma = vma_merge(mm, prev, addr, addr + len, flags,
2188 NULL, NULL, pgoff, NULL);
2189 if (vma)
2190 goto out;
2191
2192
2193
2194
2195 vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
2196 if (!vma) {
2197 vm_unacct_memory(len >> PAGE_SHIFT);
2198 return -ENOMEM;
2199 }
2200
2201 INIT_LIST_HEAD(&vma->anon_vma_chain);
2202 vma->vm_mm = mm;
2203 vma->vm_start = addr;
2204 vma->vm_end = addr + len;
2205 vma->vm_pgoff = pgoff;
2206 vma->vm_flags = flags;
2207 vma->vm_page_prot = vm_get_page_prot(flags);
2208 vma_link(mm, vma, prev, rb_link, rb_parent);
2209out:
2210 perf_event_mmap(vma);
2211 mm->total_vm += len >> PAGE_SHIFT;
2212 if (flags & VM_LOCKED) {
2213 if (!mlock_vma_pages_range(vma, addr, addr + len))
2214 mm->locked_vm += (len >> PAGE_SHIFT);
2215 }
2216 return addr;
2217}
2218
2219EXPORT_SYMBOL(do_brk);
2220
2221
2222void exit_mmap(struct mm_struct *mm)
2223{
2224 struct mmu_gather tlb;
2225 struct vm_area_struct *vma;
2226 unsigned long nr_accounted = 0;
2227 unsigned long end;
2228
2229
2230 mmu_notifier_release(mm);
2231
2232 if (mm->locked_vm) {
2233 vma = mm->mmap;
2234 while (vma) {
2235 if (vma->vm_flags & VM_LOCKED)
2236 munlock_vma_pages_all(vma);
2237 vma = vma->vm_next;
2238 }
2239 }
2240
2241 arch_exit_mmap(mm);
2242
2243 vma = mm->mmap;
2244 if (!vma)
2245 return;
2246
2247 lru_add_drain();
2248 flush_cache_mm(mm);
2249 tlb_gather_mmu(&tlb, mm, 1);
2250
2251
2252 end = unmap_vmas(&tlb, vma, 0, -1, &nr_accounted, NULL);
2253 vm_unacct_memory(nr_accounted);
2254
2255 free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0);
2256 tlb_finish_mmu(&tlb, 0, end);
2257
2258
2259
2260
2261
2262 while (vma)
2263 vma = remove_vma(vma);
2264
2265 BUG_ON(mm->nr_ptes > (FIRST_USER_ADDRESS+PMD_SIZE-1)>>PMD_SHIFT);
2266}
2267
2268
2269
2270
2271
2272int insert_vm_struct(struct mm_struct * mm, struct vm_area_struct * vma)
2273{
2274 struct vm_area_struct * __vma, * prev;
2275 struct rb_node ** rb_link, * rb_parent;
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289 if (!vma->vm_file) {
2290 BUG_ON(vma->anon_vma);
2291 vma->vm_pgoff = vma->vm_start >> PAGE_SHIFT;
2292 }
2293 __vma = find_vma_prepare(mm,vma->vm_start,&prev,&rb_link,&rb_parent);
2294 if (__vma && __vma->vm_start < vma->vm_end)
2295 return -ENOMEM;
2296 if ((vma->vm_flags & VM_ACCOUNT) &&
2297 security_vm_enough_memory_mm(mm, vma_pages(vma)))
2298 return -ENOMEM;
2299 vma_link(mm, vma, prev, rb_link, rb_parent);
2300 return 0;
2301}
2302
2303
2304
2305
2306
2307struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
2308 unsigned long addr, unsigned long len, pgoff_t pgoff)
2309{
2310 struct vm_area_struct *vma = *vmap;
2311 unsigned long vma_start = vma->vm_start;
2312 struct mm_struct *mm = vma->vm_mm;
2313 struct vm_area_struct *new_vma, *prev;
2314 struct rb_node **rb_link, *rb_parent;
2315 struct mempolicy *pol;
2316 bool faulted_in_anon_vma = true;
2317
2318
2319
2320
2321
2322 if (unlikely(!vma->vm_file && !vma->anon_vma)) {
2323 pgoff = addr >> PAGE_SHIFT;
2324 faulted_in_anon_vma = false;
2325 }
2326
2327 find_vma_prepare(mm, addr, &prev, &rb_link, &rb_parent);
2328 new_vma = vma_merge(mm, prev, addr, addr + len, vma->vm_flags,
2329 vma->anon_vma, vma->vm_file, pgoff, vma_policy(vma));
2330 if (new_vma) {
2331
2332
2333
2334 if (unlikely(vma_start >= new_vma->vm_start &&
2335 vma_start < new_vma->vm_end)) {
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348 VM_BUG_ON(faulted_in_anon_vma);
2349 *vmap = new_vma;
2350 } else
2351 anon_vma_moveto_tail(new_vma);
2352 } else {
2353 new_vma = kmem_cache_alloc(vm_area_cachep, GFP_KERNEL);
2354 if (new_vma) {
2355 *new_vma = *vma;
2356 pol = mpol_dup(vma_policy(vma));
2357 if (IS_ERR(pol))
2358 goto out_free_vma;
2359 INIT_LIST_HEAD(&new_vma->anon_vma_chain);
2360 if (anon_vma_clone(new_vma, vma))
2361 goto out_free_mempol;
2362 vma_set_policy(new_vma, pol);
2363 new_vma->vm_start = addr;
2364 new_vma->vm_end = addr + len;
2365 new_vma->vm_pgoff = pgoff;
2366 if (new_vma->vm_file) {
2367 get_file(new_vma->vm_file);
2368 if (vma->vm_flags & VM_EXECUTABLE)
2369 added_exe_file_vma(mm);
2370 }
2371 if (new_vma->vm_ops && new_vma->vm_ops->open)
2372 new_vma->vm_ops->open(new_vma);
2373 vma_link(mm, new_vma, prev, rb_link, rb_parent);
2374 }
2375 }
2376 return new_vma;
2377
2378 out_free_mempol:
2379 mpol_put(pol);
2380 out_free_vma:
2381 kmem_cache_free(vm_area_cachep, new_vma);
2382 return NULL;
2383}
2384
2385
2386
2387
2388
2389int may_expand_vm(struct mm_struct *mm, unsigned long npages)
2390{
2391 unsigned long cur = mm->total_vm;
2392 unsigned long lim;
2393
2394 lim = rlimit(RLIMIT_AS) >> PAGE_SHIFT;
2395
2396 if (cur + npages > lim)
2397 return 0;
2398 return 1;
2399}
2400
2401
2402static int special_mapping_fault(struct vm_area_struct *vma,
2403 struct vm_fault *vmf)
2404{
2405 pgoff_t pgoff;
2406 struct page **pages;
2407
2408
2409
2410
2411
2412
2413
2414 pgoff = vmf->pgoff - vma->vm_pgoff;
2415
2416 for (pages = vma->vm_private_data; pgoff && *pages; ++pages)
2417 pgoff--;
2418
2419 if (*pages) {
2420 struct page *page = *pages;
2421 get_page(page);
2422 vmf->page = page;
2423 return 0;
2424 }
2425
2426 return VM_FAULT_SIGBUS;
2427}
2428
2429
2430
2431
2432static void special_mapping_close(struct vm_area_struct *vma)
2433{
2434}
2435
2436static const struct vm_operations_struct special_mapping_vmops = {
2437 .close = special_mapping_close,
2438 .fault = special_mapping_fault,
2439};
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450int install_special_mapping(struct mm_struct *mm,
2451 unsigned long addr, unsigned long len,
2452 unsigned long vm_flags, struct page **pages)
2453{
2454 int ret;
2455 struct vm_area_struct *vma;
2456
2457 vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
2458 if (unlikely(vma == NULL))
2459 return -ENOMEM;
2460
2461 INIT_LIST_HEAD(&vma->anon_vma_chain);
2462 vma->vm_mm = mm;
2463 vma->vm_start = addr;
2464 vma->vm_end = addr + len;
2465
2466 vma->vm_flags = vm_flags | mm->def_flags | VM_DONTEXPAND;
2467 vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
2468
2469 vma->vm_ops = &special_mapping_vmops;
2470 vma->vm_private_data = pages;
2471
2472 ret = security_file_mmap(NULL, 0, 0, 0, vma->vm_start, 1);
2473 if (ret)
2474 goto out;
2475
2476 ret = insert_vm_struct(mm, vma);
2477 if (ret)
2478 goto out;
2479
2480 mm->total_vm += len >> PAGE_SHIFT;
2481
2482 perf_event_mmap(vma);
2483
2484 return 0;
2485
2486out:
2487 kmem_cache_free(vm_area_cachep, vma);
2488 return ret;
2489}
2490
2491static DEFINE_MUTEX(mm_all_locks_mutex);
2492
2493static void vm_lock_anon_vma(struct mm_struct *mm, struct anon_vma *anon_vma)
2494{
2495 if (!test_bit(0, (unsigned long *) &anon_vma->root->head.next)) {
2496
2497
2498
2499
2500 mutex_lock_nest_lock(&anon_vma->root->mutex, &mm->mmap_sem);
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510 if (__test_and_set_bit(0, (unsigned long *)
2511 &anon_vma->root->head.next))
2512 BUG();
2513 }
2514}
2515
2516static void vm_lock_mapping(struct mm_struct *mm, struct address_space *mapping)
2517{
2518 if (!test_bit(AS_MM_ALL_LOCKS, &mapping->flags)) {
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528 if (test_and_set_bit(AS_MM_ALL_LOCKS, &mapping->flags))
2529 BUG();
2530 mutex_lock_nest_lock(&mapping->i_mmap_mutex, &mm->mmap_sem);
2531 }
2532}
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566int mm_take_all_locks(struct mm_struct *mm)
2567{
2568 struct vm_area_struct *vma;
2569 struct anon_vma_chain *avc;
2570
2571 BUG_ON(down_read_trylock(&mm->mmap_sem));
2572
2573 mutex_lock(&mm_all_locks_mutex);
2574
2575 for (vma = mm->mmap; vma; vma = vma->vm_next) {
2576 if (signal_pending(current))
2577 goto out_unlock;
2578 if (vma->vm_file && vma->vm_file->f_mapping)
2579 vm_lock_mapping(mm, vma->vm_file->f_mapping);
2580 }
2581
2582 for (vma = mm->mmap; vma; vma = vma->vm_next) {
2583 if (signal_pending(current))
2584 goto out_unlock;
2585 if (vma->anon_vma)
2586 list_for_each_entry(avc, &vma->anon_vma_chain, same_vma)
2587 vm_lock_anon_vma(mm, avc->anon_vma);
2588 }
2589
2590 return 0;
2591
2592out_unlock:
2593 mm_drop_all_locks(mm);
2594 return -EINTR;
2595}
2596
2597static void vm_unlock_anon_vma(struct anon_vma *anon_vma)
2598{
2599 if (test_bit(0, (unsigned long *) &anon_vma->root->head.next)) {
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612 if (!__test_and_clear_bit(0, (unsigned long *)
2613 &anon_vma->root->head.next))
2614 BUG();
2615 anon_vma_unlock(anon_vma);
2616 }
2617}
2618
2619static void vm_unlock_mapping(struct address_space *mapping)
2620{
2621 if (test_bit(AS_MM_ALL_LOCKS, &mapping->flags)) {
2622
2623
2624
2625
2626 mutex_unlock(&mapping->i_mmap_mutex);
2627 if (!test_and_clear_bit(AS_MM_ALL_LOCKS,
2628 &mapping->flags))
2629 BUG();
2630 }
2631}
2632
2633
2634
2635
2636
2637void mm_drop_all_locks(struct mm_struct *mm)
2638{
2639 struct vm_area_struct *vma;
2640 struct anon_vma_chain *avc;
2641
2642 BUG_ON(down_read_trylock(&mm->mmap_sem));
2643 BUG_ON(!mutex_is_locked(&mm_all_locks_mutex));
2644
2645 for (vma = mm->mmap; vma; vma = vma->vm_next) {
2646 if (vma->anon_vma)
2647 list_for_each_entry(avc, &vma->anon_vma_chain, same_vma)
2648 vm_unlock_anon_vma(avc->anon_vma);
2649 if (vma->vm_file && vma->vm_file->f_mapping)
2650 vm_unlock_mapping(vma->vm_file->f_mapping);
2651 }
2652
2653 mutex_unlock(&mm_all_locks_mutex);
2654}
2655
2656
2657
2658
2659void __init mmap_init(void)
2660{
2661 int ret;
2662
2663 ret = percpu_counter_init(&vm_committed_as, 0);
2664 VM_BUG_ON(ret);
2665}
2666