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