From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: [hnaz-mm:master 291/410] mm/mmap.c:850 __vma_adjust() error: uninitialized symbol 'next_next'.
Date: Sat, 30 Apr 2022 07:15:35 +0800 [thread overview]
Message-ID: <202204300714.hs00NRDM-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 25101 bytes --]
CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
CC: linux-kernel(a)vger.kernel.org
TO: "Liam R. Howlett" <Liam.Howlett@Oracle.com>
CC: Johannes Weiner <hannes@cmpxchg.org>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Linux Memory Management List <linux-mm@kvack.org>
tree: https://github.com/hnaz/linux-mm master
head: bf4803abaa3e9d2fa207c0675a2d2abf0fd44f66
commit: 48c8a6f751a2c87c2dcfa40442e0ebe3afd7cd76 [291/410] mm: remove rb tree.
:::::: branch date: 3 days ago
:::::: commit date: 3 days ago
config: x86_64-randconfig-m001-20220425 (https://download.01.org/0day-ci/archive/20220430/202204300714.hs00NRDM-lkp(a)intel.com/config)
compiler: gcc-11 (Debian 11.2.0-20) 11.2.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
smatch warnings:
mm/mmap.c:850 __vma_adjust() error: uninitialized symbol 'next_next'.
vim +/next_next +850 mm/mmap.c
^1da177e4c3f415 Linus Torvalds 2005-04-16 608
^1da177e4c3f415 Linus Torvalds 2005-04-16 609 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 610 * We cannot adjust vm_start, vm_end, vm_pgoff fields of a vma that
^1da177e4c3f415 Linus Torvalds 2005-04-16 611 * is already present in an i_mmap tree without adjusting the tree.
^1da177e4c3f415 Linus Torvalds 2005-04-16 612 * The following helper function should be used when such adjustments
^1da177e4c3f415 Linus Torvalds 2005-04-16 613 * are necessary. The "insert" vma (if any) is to be inserted
^1da177e4c3f415 Linus Torvalds 2005-04-16 614 * before we drop the necessary locks.
^1da177e4c3f415 Linus Torvalds 2005-04-16 615 */
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 616 int __vma_adjust(struct vm_area_struct *vma, unsigned long start,
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 617 unsigned long end, pgoff_t pgoff, struct vm_area_struct *insert,
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 618 struct vm_area_struct *expand)
^1da177e4c3f415 Linus Torvalds 2005-04-16 619 {
^1da177e4c3f415 Linus Torvalds 2005-04-16 620 struct mm_struct *mm = vma->vm_mm;
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 621 struct vm_area_struct *next_next, *next = find_vma(mm, vma->vm_end);
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 622 struct vm_area_struct *orig_vma = vma;
^1da177e4c3f415 Linus Torvalds 2005-04-16 623 struct address_space *mapping = NULL;
f808c13fd373894 Davidlohr Bueso 2017-09-08 624 struct rb_root_cached *root = NULL;
012f18004da33ba Rik van Riel 2010-08-09 625 struct anon_vma *anon_vma = NULL;
^1da177e4c3f415 Linus Torvalds 2005-04-16 626 struct file *file = vma->vm_file;
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 627 bool vma_changed = false;
^1da177e4c3f415 Linus Torvalds 2005-04-16 628 long adjust_next = 0;
^1da177e4c3f415 Linus Torvalds 2005-04-16 629 int remove_next = 0;
f90a08f5f1a5029 Liam R. Howlett 2022-04-26 630 MA_STATE(mas, &mm->mm_mt, 0, 0);
734537c9cb725fc Kirill A. Shutemov 2016-07-28 631 struct vm_area_struct *exporter = NULL, *importer = NULL;
287d97ac0321367 Linus Torvalds 2010-04-10 632
f90a08f5f1a5029 Liam R. Howlett 2022-04-26 633 if (next && !insert) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 634 if (end >= next->vm_end) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 635 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 636 * vma expands, overlapping all the next, and
^1da177e4c3f415 Linus Torvalds 2005-04-16 637 * perhaps the one after too (mprotect case 6).
86d12e471d9f152 Andrea Arcangeli 2016-10-07 638 * The only other cases that gets here are
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 639 * case 1, case 7 and case 8.
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 640 */
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 641 if (next == expand) {
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 642 /*
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 643 * The only case where we don't expand "vma"
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 644 * and we expand "next" instead is case 8.
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 645 */
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 646 VM_WARN_ON(end != next->vm_end);
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 647 /*
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 648 * remove_next == 3 means we're
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 649 * removing "vma" and that to do so we
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 650 * swapped "vma" and "next".
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 651 */
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 652 remove_next = 3;
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 653 VM_WARN_ON(file != next->vm_file);
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 654 swap(vma, next);
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 655 } else {
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 656 VM_WARN_ON(expand != vma);
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 657 /*
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 658 * case 1, 6, 7, remove_next == 2 is case 6,
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 659 * remove_next == 1 is case 1 or 7.
^1da177e4c3f415 Linus Torvalds 2005-04-16 660 */
734537c9cb725fc Kirill A. Shutemov 2016-07-28 661 remove_next = 1 + (end > next->vm_end);
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 662 next_next = find_vma(mm, next->vm_end);
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 663 VM_WARN_ON(remove_next == 2 &&
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 664 end != next_next->vm_end);
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 665 /* trim end to next, for case 6 first pass */
^1da177e4c3f415 Linus Torvalds 2005-04-16 666 end = next->vm_end;
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 667 }
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 668
287d97ac0321367 Linus Torvalds 2010-04-10 669 exporter = next;
^1da177e4c3f415 Linus Torvalds 2005-04-16 670 importer = vma;
734537c9cb725fc Kirill A. Shutemov 2016-07-28 671
734537c9cb725fc Kirill A. Shutemov 2016-07-28 672 /*
734537c9cb725fc Kirill A. Shutemov 2016-07-28 673 * If next doesn't have anon_vma, import from vma after
734537c9cb725fc Kirill A. Shutemov 2016-07-28 674 * next, if the vma overlaps with it.
734537c9cb725fc Kirill A. Shutemov 2016-07-28 675 */
97a42cd4398162a Andrea Arcangeli 2016-10-07 676 if (remove_next == 2 && !next->anon_vma)
734537c9cb725fc Kirill A. Shutemov 2016-07-28 677 exporter = next->vm_next;
734537c9cb725fc Kirill A. Shutemov 2016-07-28 678
^1da177e4c3f415 Linus Torvalds 2005-04-16 679 } else if (end > next->vm_start) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 680 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 681 * vma expands, overlapping part of the next:
^1da177e4c3f415 Linus Torvalds 2005-04-16 682 * mprotect case 5 shifting the boundary up.
^1da177e4c3f415 Linus Torvalds 2005-04-16 683 */
f9d86a60572295e Wei Yang 2020-10-13 684 adjust_next = (end - next->vm_start);
287d97ac0321367 Linus Torvalds 2010-04-10 685 exporter = next;
^1da177e4c3f415 Linus Torvalds 2005-04-16 686 importer = vma;
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 687 VM_WARN_ON(expand != importer);
^1da177e4c3f415 Linus Torvalds 2005-04-16 688 } else if (end < vma->vm_end) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 689 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 690 * vma shrinks, and !insert tells it's not
^1da177e4c3f415 Linus Torvalds 2005-04-16 691 * split_vma inserting another: so it must be
^1da177e4c3f415 Linus Torvalds 2005-04-16 692 * mprotect case 4 shifting the boundary down.
^1da177e4c3f415 Linus Torvalds 2005-04-16 693 */
f9d86a60572295e Wei Yang 2020-10-13 694 adjust_next = -(vma->vm_end - end);
287d97ac0321367 Linus Torvalds 2010-04-10 695 exporter = vma;
^1da177e4c3f415 Linus Torvalds 2005-04-16 696 importer = next;
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 697 VM_WARN_ON(expand != importer);
^1da177e4c3f415 Linus Torvalds 2005-04-16 698 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 699
5beb49305251e56 Rik van Riel 2010-03-05 700 /*
5beb49305251e56 Rik van Riel 2010-03-05 701 * Easily overlooked: when mprotect shifts the boundary,
5beb49305251e56 Rik van Riel 2010-03-05 702 * make sure the expanding vma has anon_vma set if the
5beb49305251e56 Rik van Riel 2010-03-05 703 * shrinking vma had, to cover any anon pages imported.
5beb49305251e56 Rik van Riel 2010-03-05 704 */
287d97ac0321367 Linus Torvalds 2010-04-10 705 if (exporter && exporter->anon_vma && !importer->anon_vma) {
c4ea95d7cd08d9f Daniel Forrest 2014-12-02 706 int error;
c4ea95d7cd08d9f Daniel Forrest 2014-12-02 707
b800c91a0517071 Konstantin Khlebnikov 2015-01-11 708 importer->anon_vma = exporter->anon_vma;
c4ea95d7cd08d9f Daniel Forrest 2014-12-02 709 error = anon_vma_clone(importer, exporter);
3fe89b3e2a7bbf3 Leon Yu 2015-03-25 710 if (error)
c4ea95d7cd08d9f Daniel Forrest 2014-12-02 711 return error;
b800c91a0517071 Konstantin Khlebnikov 2015-01-11 712 }
5beb49305251e56 Rik van Riel 2010-03-05 713 }
734537c9cb725fc Kirill A. Shutemov 2016-07-28 714 again:
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 715 vma_adjust_trans_huge(orig_vma, start, end, adjust_next);
37f9f5595c26d3c Kirill A. Shutemov 2016-07-26 716
f90a08f5f1a5029 Liam R. Howlett 2022-04-26 717 if (mas_preallocate(&mas, vma, GFP_KERNEL)) {
f90a08f5f1a5029 Liam R. Howlett 2022-04-26 718 if (exporter && exporter->anon_vma)
f90a08f5f1a5029 Liam R. Howlett 2022-04-26 719 unlink_anon_vmas(importer);
f90a08f5f1a5029 Liam R. Howlett 2022-04-26 720 return -ENOMEM;
f90a08f5f1a5029 Liam R. Howlett 2022-04-26 721 }
f90a08f5f1a5029 Liam R. Howlett 2022-04-26 722
^1da177e4c3f415 Linus Torvalds 2005-04-16 723 if (file) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 724 mapping = file->f_mapping;
^1da177e4c3f415 Linus Torvalds 2005-04-16 725 root = &mapping->i_mmap;
cbc91f71b51b833 Srikar Dronamraju 2012-04-11 726 uprobe_munmap(vma, vma->vm_start, vma->vm_end);
682968e0c425c60 Srikar Dronamraju 2012-03-30 727
682968e0c425c60 Srikar Dronamraju 2012-03-30 728 if (adjust_next)
27ba0644ea9dfe6 Kirill A. Shutemov 2015-02-10 729 uprobe_munmap(next, next->vm_start, next->vm_end);
682968e0c425c60 Srikar Dronamraju 2012-03-30 730
83cde9e8ba95d18 Davidlohr Bueso 2014-12-12 731 i_mmap_lock_write(mapping);
^1da177e4c3f415 Linus Torvalds 2005-04-16 732 if (insert) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 733 /*
6b2dbba8b6ac4df Michel Lespinasse 2012-10-08 734 * Put into interval tree now, so instantiated pages
^1da177e4c3f415 Linus Torvalds 2005-04-16 735 * are visible to arm/parisc __flush_dcache_page
^1da177e4c3f415 Linus Torvalds 2005-04-16 736 * throughout; but we cannot insert into address
^1da177e4c3f415 Linus Torvalds 2005-04-16 737 * space until vma start or end is updated.
^1da177e4c3f415 Linus Torvalds 2005-04-16 738 */
^1da177e4c3f415 Linus Torvalds 2005-04-16 739 __vma_link_file(insert);
^1da177e4c3f415 Linus Torvalds 2005-04-16 740 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 741 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 742
012f18004da33ba Rik van Riel 2010-08-09 743 anon_vma = vma->anon_vma;
bf181b9f9d8dfbb Michel Lespinasse 2012-10-08 744 if (!anon_vma && adjust_next)
bf181b9f9d8dfbb Michel Lespinasse 2012-10-08 745 anon_vma = next->anon_vma;
bf181b9f9d8dfbb Michel Lespinasse 2012-10-08 746 if (anon_vma) {
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 747 VM_WARN_ON(adjust_next && next->anon_vma &&
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 748 anon_vma != next->anon_vma);
4fc3f1d66b1ef0d Ingo Molnar 2012-12-02 749 anon_vma_lock_write(anon_vma);
bf181b9f9d8dfbb Michel Lespinasse 2012-10-08 750 anon_vma_interval_tree_pre_update_vma(vma);
bf181b9f9d8dfbb Michel Lespinasse 2012-10-08 751 if (adjust_next)
bf181b9f9d8dfbb Michel Lespinasse 2012-10-08 752 anon_vma_interval_tree_pre_update_vma(next);
bf181b9f9d8dfbb Michel Lespinasse 2012-10-08 753 }
012f18004da33ba Rik van Riel 2010-08-09 754
0fc48a6e213ab8e Wei Yang 2020-10-13 755 if (file) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 756 flush_dcache_mmap_lock(mapping);
6b2dbba8b6ac4df Michel Lespinasse 2012-10-08 757 vma_interval_tree_remove(vma, root);
^1da177e4c3f415 Linus Torvalds 2005-04-16 758 if (adjust_next)
6b2dbba8b6ac4df Michel Lespinasse 2012-10-08 759 vma_interval_tree_remove(next, root);
^1da177e4c3f415 Linus Torvalds 2005-04-16 760 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 761
d37371870ceb1d2 Michel Lespinasse 2012-12-11 762 if (start != vma->vm_start) {
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 763 if (vma->vm_start < start)
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 764 vma_mt_szero(mm, vma->vm_start, start);
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 765 else
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 766 vma_changed = true;
^1da177e4c3f415 Linus Torvalds 2005-04-16 767 vma->vm_start = start;
d37371870ceb1d2 Michel Lespinasse 2012-12-11 768 }
d37371870ceb1d2 Michel Lespinasse 2012-12-11 769 if (end != vma->vm_end) {
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 770 if (vma->vm_end > end)
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 771 vma_mt_szero(mm, end, vma->vm_end);
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 772 else
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 773 vma_changed = true;
^1da177e4c3f415 Linus Torvalds 2005-04-16 774 vma->vm_end = end;
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 775 if (!next)
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 776 mm->highest_vm_end = vm_end_gap(vma);
d37371870ceb1d2 Michel Lespinasse 2012-12-11 777 }
f90a08f5f1a5029 Liam R. Howlett 2022-04-26 778
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 779 if (vma_changed)
f90a08f5f1a5029 Liam R. Howlett 2022-04-26 780 vma_mas_store(vma, &mas);
f90a08f5f1a5029 Liam R. Howlett 2022-04-26 781
^1da177e4c3f415 Linus Torvalds 2005-04-16 782 vma->vm_pgoff = pgoff;
^1da177e4c3f415 Linus Torvalds 2005-04-16 783 if (adjust_next) {
f9d86a60572295e Wei Yang 2020-10-13 784 next->vm_start += adjust_next;
f9d86a60572295e Wei Yang 2020-10-13 785 next->vm_pgoff += adjust_next >> PAGE_SHIFT;
f90a08f5f1a5029 Liam R. Howlett 2022-04-26 786 vma_mas_store(next, &mas);
^1da177e4c3f415 Linus Torvalds 2005-04-16 787 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 788
0fc48a6e213ab8e Wei Yang 2020-10-13 789 if (file) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 790 if (adjust_next)
6b2dbba8b6ac4df Michel Lespinasse 2012-10-08 791 vma_interval_tree_insert(next, root);
6b2dbba8b6ac4df Michel Lespinasse 2012-10-08 792 vma_interval_tree_insert(vma, root);
^1da177e4c3f415 Linus Torvalds 2005-04-16 793 flush_dcache_mmap_unlock(mapping);
^1da177e4c3f415 Linus Torvalds 2005-04-16 794 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 795
^1da177e4c3f415 Linus Torvalds 2005-04-16 796 if (remove_next) {
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 797 __vma_unlink_list(mm, next);
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 798 /* Kill the cache */
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 799 vmacache_invalidate(mm);
^1da177e4c3f415 Linus Torvalds 2005-04-16 800 if (file)
^1da177e4c3f415 Linus Torvalds 2005-04-16 801 __remove_shared_vm_struct(next, file, mapping);
^1da177e4c3f415 Linus Torvalds 2005-04-16 802 } else if (insert) {
^1da177e4c3f415 Linus Torvalds 2005-04-16 803 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 804 * split_vma has split insert from vma, and needs
^1da177e4c3f415 Linus Torvalds 2005-04-16 805 * us to insert it before dropping the locks
^1da177e4c3f415 Linus Torvalds 2005-04-16 806 * (it may either follow vma or precede it).
^1da177e4c3f415 Linus Torvalds 2005-04-16 807 */
f90a08f5f1a5029 Liam R. Howlett 2022-04-26 808 __insert_vm_struct(mm, &mas, insert);
^1da177e4c3f415 Linus Torvalds 2005-04-16 809 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 810
bf181b9f9d8dfbb Michel Lespinasse 2012-10-08 811 if (anon_vma) {
bf181b9f9d8dfbb Michel Lespinasse 2012-10-08 812 anon_vma_interval_tree_post_update_vma(vma);
bf181b9f9d8dfbb Michel Lespinasse 2012-10-08 813 if (adjust_next)
bf181b9f9d8dfbb Michel Lespinasse 2012-10-08 814 anon_vma_interval_tree_post_update_vma(next);
08b52706d505658 Konstantin Khlebnikov 2013-02-22 815 anon_vma_unlock_write(anon_vma);
bf181b9f9d8dfbb Michel Lespinasse 2012-10-08 816 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 817
0fc48a6e213ab8e Wei Yang 2020-10-13 818 if (file) {
808fbdbea05f1e9 Wei Yang 2020-10-13 819 i_mmap_unlock_write(mapping);
7b2d81d48a2d8e3 Ingo Molnar 2012-02-17 820 uprobe_mmap(vma);
2b144498350860b Srikar Dronamraju 2012-02-09 821
2b144498350860b Srikar Dronamraju 2012-02-09 822 if (adjust_next)
7b2d81d48a2d8e3 Ingo Molnar 2012-02-17 823 uprobe_mmap(next);
2b144498350860b Srikar Dronamraju 2012-02-09 824 }
2b144498350860b Srikar Dronamraju 2012-02-09 825
^1da177e4c3f415 Linus Torvalds 2005-04-16 826 if (remove_next) {
925d1c401fa6cfd Matt Helsley 2008-04-29 827 if (file) {
cbc91f71b51b833 Srikar Dronamraju 2012-04-11 828 uprobe_munmap(next, next->vm_start, next->vm_end);
^1da177e4c3f415 Linus Torvalds 2005-04-16 829 fput(file);
925d1c401fa6cfd Matt Helsley 2008-04-29 830 }
5beb49305251e56 Rik van Riel 2010-03-05 831 if (next->anon_vma)
5beb49305251e56 Rik van Riel 2010-03-05 832 anon_vma_merge(vma, next);
^1da177e4c3f415 Linus Torvalds 2005-04-16 833 mm->map_count--;
3964acd0dbec123 Oleg Nesterov 2013-07-31 834 mpol_put(vma_policy(next));
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 835 BUG_ON(vma->vm_end < next->vm_end);
3928d4f5ee37cdc Linus Torvalds 2018-07-21 836 vm_area_free(next);
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 837
^1da177e4c3f415 Linus Torvalds 2005-04-16 838 /*
^1da177e4c3f415 Linus Torvalds 2005-04-16 839 * In mprotect's case 6 (see comments on vma_merge),
^1da177e4c3f415 Linus Torvalds 2005-04-16 840 * we must remove another next too. It would clutter
^1da177e4c3f415 Linus Torvalds 2005-04-16 841 * up the code too much to do both in one go.
^1da177e4c3f415 Linus Torvalds 2005-04-16 842 */
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 843 if (remove_next != 3) {
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 844 /*
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 845 * If "next" was removed and vma->vm_end was
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 846 * expanded (up) over it, in turn
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 847 * "next->vm_prev->vm_end" changed and the
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 848 * "vma->vm_next" gap must be updated.
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 849 */
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 @850 next = next_next;
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 851 } else {
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 852 /*
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 853 * For the scope of the comment "next" and
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 854 * "vma" considered pre-swap(): if "vma" was
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 855 * removed, next->vm_start was expanded (down)
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 856 * over it and the "next" gap must be updated.
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 857 * Because of the swap() the post-swap() "vma"
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 858 * actually points to pre-swap() "next"
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 859 * (post-swap() "next" as opposed is now a
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 860 * dangling pointer).
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 861 */
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 862 next = vma;
e86f15ee64d8ee4 Andrea Arcangeli 2016-10-07 863 }
734537c9cb725fc Kirill A. Shutemov 2016-07-28 864 if (remove_next == 2) {
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 865 mas_reset(&mas);
734537c9cb725fc Kirill A. Shutemov 2016-07-28 866 remove_next = 1;
734537c9cb725fc Kirill A. Shutemov 2016-07-28 867 end = next->vm_end;
^1da177e4c3f415 Linus Torvalds 2005-04-16 868 goto again;
48c8a6f751a2c87 Liam R. Howlett 2022-04-26 869 } else if (!next) {
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 870 /*
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 871 * If remove_next == 2 we obviously can't
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 872 * reach this path.
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 873 *
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 874 * If remove_next == 3 we can't reach this
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 875 * path because pre-swap() next is always not
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 876 * NULL. pre-swap() "next" is not being
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 877 * removed and its next->vm_end is not altered
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 878 * (and furthermore "end" already matches
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 879 * next->vm_end in remove_next == 3).
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 880 *
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 881 * We reach this only in the remove_next == 1
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 882 * case if the "next" vma that was removed was
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 883 * the highest vma of the mm. However in such
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 884 * case next->vm_end == "end" and the extended
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 885 * "vma" has vma->vm_end == next->vm_end so
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 886 * mm->highest_vm_end doesn't need any update
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 887 * in remove_next == 1 case.
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 888 */
1be7107fbe18eed Hugh Dickins 2017-06-19 889 VM_WARN_ON(mm->highest_vm_end != vm_end_gap(vma));
fb8c41e9ad1f356 Andrea Arcangeli 2016-10-07 890 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 891 }
2b144498350860b Srikar Dronamraju 2012-02-09 892 if (insert && file)
7b2d81d48a2d8e3 Ingo Molnar 2012-02-17 893 uprobe_mmap(insert);
^1da177e4c3f415 Linus Torvalds 2005-04-16 894
^1da177e4c3f415 Linus Torvalds 2005-04-16 895 validate_mm(mm);
5beb49305251e56 Rik van Riel 2010-03-05 896 return 0;
^1da177e4c3f415 Linus Torvalds 2005-04-16 897 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 898
--
0-DAY CI Kernel Test Service
https://01.org/lkp
reply other threads:[~2022-04-29 23:15 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202204300714.hs00NRDM-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.