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