* [hnaz-mm:master 292/410] mm/mmap.c:795 __vma_adjust() error: we previously assumed 'next' could be null (see line 786)
@ 2022-04-30 21:44 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-04-30 21:44 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 26158 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: dce94fc7a40fd9b59cb5c56b933b45b978ca85c3 [292/410] mmap: change zeroing of maple tree in __vma_adjust()
:::::: branch date: 4 days ago
:::::: commit date: 4 days ago
config: x86_64-randconfig-m001-20220425 (https://download.01.org/0day-ci/archive/20220501/202205010525.4JNDec1E-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:795 __vma_adjust() error: we previously assumed 'next' could be null (see line 786)
vim +/next +795 mm/mmap.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 608
^1da177e4c3f41 Linus Torvalds 2005-04-16 609 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 610 * We cannot adjust vm_start, vm_end, vm_pgoff fields of a vma that
^1da177e4c3f41 Linus Torvalds 2005-04-16 611 * is already present in an i_mmap tree without adjusting the tree.
^1da177e4c3f41 Linus Torvalds 2005-04-16 612 * The following helper function should be used when such adjustments
^1da177e4c3f41 Linus Torvalds 2005-04-16 613 * are necessary. The "insert" vma (if any) is to be inserted
^1da177e4c3f41 Linus Torvalds 2005-04-16 614 * before we drop the necessary locks.
^1da177e4c3f41 Linus Torvalds 2005-04-16 615 */
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 616 int __vma_adjust(struct vm_area_struct *vma, unsigned long start,
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 617 unsigned long end, pgoff_t pgoff, struct vm_area_struct *insert,
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 618 struct vm_area_struct *expand)
^1da177e4c3f41 Linus Torvalds 2005-04-16 619 {
^1da177e4c3f41 Linus Torvalds 2005-04-16 620 struct mm_struct *mm = vma->vm_mm;
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 621 struct vm_area_struct *next_next, *next = find_vma(mm, vma->vm_end);
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 622 struct vm_area_struct *orig_vma = vma;
^1da177e4c3f41 Linus Torvalds 2005-04-16 623 struct address_space *mapping = NULL;
f808c13fd37389 Davidlohr Bueso 2017-09-08 624 struct rb_root_cached *root = NULL;
012f18004da33b Rik van Riel 2010-08-09 625 struct anon_vma *anon_vma = NULL;
^1da177e4c3f41 Linus Torvalds 2005-04-16 626 struct file *file = vma->vm_file;
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 627 bool vma_changed = false;
^1da177e4c3f41 Linus Torvalds 2005-04-16 628 long adjust_next = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 629 int remove_next = 0;
f90a08f5f1a502 Liam R. Howlett 2022-04-26 630 MA_STATE(mas, &mm->mm_mt, 0, 0);
734537c9cb725f Kirill A. Shutemov 2016-07-28 631 struct vm_area_struct *exporter = NULL, *importer = NULL;
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 632 unsigned long ll_prev = vma->vm_start; /* linked list prev. */
287d97ac032136 Linus Torvalds 2010-04-10 633
f90a08f5f1a502 Liam R. Howlett 2022-04-26 634 if (next && !insert) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 635 if (end >= next->vm_end) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 636 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 637 * vma expands, overlapping all the next, and
^1da177e4c3f41 Linus Torvalds 2005-04-16 638 * perhaps the one after too (mprotect case 6).
86d12e471d9f15 Andrea Arcangeli 2016-10-07 639 * The only other cases that gets here are
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 640 * case 1, case 7 and case 8.
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 641 */
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 642 if (next == expand) {
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 643 /*
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 644 * The only case where we don't expand "vma"
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 645 * and we expand "next" instead is case 8.
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 646 */
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 647 VM_WARN_ON(end != next->vm_end);
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 648 /*
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 649 * remove_next == 3 means we're
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 650 * removing "vma" and that to do so we
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 651 * swapped "vma" and "next".
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 652 */
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 653 remove_next = 3;
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 654 VM_WARN_ON(file != next->vm_file);
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 655 swap(vma, next);
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 656 } else {
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 657 VM_WARN_ON(expand != vma);
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 658 /*
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 659 * case 1, 6, 7, remove_next == 2 is case 6,
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 660 * remove_next == 1 is case 1 or 7.
^1da177e4c3f41 Linus Torvalds 2005-04-16 661 */
734537c9cb725f Kirill A. Shutemov 2016-07-28 662 remove_next = 1 + (end > next->vm_end);
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 663 next_next = find_vma(mm, next->vm_end);
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 664 VM_WARN_ON(remove_next == 2 &&
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 665 end != next_next->vm_end);
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 666 /* trim end to next, for case 6 first pass */
^1da177e4c3f41 Linus Torvalds 2005-04-16 667 end = next->vm_end;
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 668 }
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 669
287d97ac032136 Linus Torvalds 2010-04-10 670 exporter = next;
^1da177e4c3f41 Linus Torvalds 2005-04-16 671 importer = vma;
734537c9cb725f Kirill A. Shutemov 2016-07-28 672
734537c9cb725f Kirill A. Shutemov 2016-07-28 673 /*
734537c9cb725f Kirill A. Shutemov 2016-07-28 674 * If next doesn't have anon_vma, import from vma after
734537c9cb725f Kirill A. Shutemov 2016-07-28 675 * next, if the vma overlaps with it.
734537c9cb725f Kirill A. Shutemov 2016-07-28 676 */
97a42cd4398162 Andrea Arcangeli 2016-10-07 677 if (remove_next == 2 && !next->anon_vma)
734537c9cb725f Kirill A. Shutemov 2016-07-28 678 exporter = next->vm_next;
734537c9cb725f Kirill A. Shutemov 2016-07-28 679
^1da177e4c3f41 Linus Torvalds 2005-04-16 680 } else if (end > next->vm_start) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 681 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 682 * vma expands, overlapping part of the next:
^1da177e4c3f41 Linus Torvalds 2005-04-16 683 * mprotect case 5 shifting the boundary up.
^1da177e4c3f41 Linus Torvalds 2005-04-16 684 */
f9d86a60572295 Wei Yang 2020-10-13 685 adjust_next = (end - next->vm_start);
287d97ac032136 Linus Torvalds 2010-04-10 686 exporter = next;
^1da177e4c3f41 Linus Torvalds 2005-04-16 687 importer = vma;
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 688 VM_WARN_ON(expand != importer);
^1da177e4c3f41 Linus Torvalds 2005-04-16 689 } else if (end < vma->vm_end) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 690 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 691 * vma shrinks, and !insert tells it's not
^1da177e4c3f41 Linus Torvalds 2005-04-16 692 * split_vma inserting another: so it must be
^1da177e4c3f41 Linus Torvalds 2005-04-16 693 * mprotect case 4 shifting the boundary down.
^1da177e4c3f41 Linus Torvalds 2005-04-16 694 */
f9d86a60572295 Wei Yang 2020-10-13 695 adjust_next = -(vma->vm_end - end);
287d97ac032136 Linus Torvalds 2010-04-10 696 exporter = vma;
^1da177e4c3f41 Linus Torvalds 2005-04-16 697 importer = next;
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 698 VM_WARN_ON(expand != importer);
^1da177e4c3f41 Linus Torvalds 2005-04-16 699 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 700
5beb49305251e5 Rik van Riel 2010-03-05 701 /*
5beb49305251e5 Rik van Riel 2010-03-05 702 * Easily overlooked: when mprotect shifts the boundary,
5beb49305251e5 Rik van Riel 2010-03-05 703 * make sure the expanding vma has anon_vma set if the
5beb49305251e5 Rik van Riel 2010-03-05 704 * shrinking vma had, to cover any anon pages imported.
5beb49305251e5 Rik van Riel 2010-03-05 705 */
287d97ac032136 Linus Torvalds 2010-04-10 706 if (exporter && exporter->anon_vma && !importer->anon_vma) {
c4ea95d7cd08d9 Daniel Forrest 2014-12-02 707 int error;
c4ea95d7cd08d9 Daniel Forrest 2014-12-02 708
b800c91a051707 Konstantin Khlebnikov 2015-01-11 709 importer->anon_vma = exporter->anon_vma;
c4ea95d7cd08d9 Daniel Forrest 2014-12-02 710 error = anon_vma_clone(importer, exporter);
3fe89b3e2a7bbf Leon Yu 2015-03-25 711 if (error)
c4ea95d7cd08d9 Daniel Forrest 2014-12-02 712 return error;
b800c91a051707 Konstantin Khlebnikov 2015-01-11 713 }
5beb49305251e5 Rik van Riel 2010-03-05 714 }
734537c9cb725f Kirill A. Shutemov 2016-07-28 715 again:
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 716 vma_adjust_trans_huge(orig_vma, start, end, adjust_next);
37f9f5595c26d3 Kirill A. Shutemov 2016-07-26 717
f90a08f5f1a502 Liam R. Howlett 2022-04-26 718 if (mas_preallocate(&mas, vma, GFP_KERNEL)) {
f90a08f5f1a502 Liam R. Howlett 2022-04-26 719 if (exporter && exporter->anon_vma)
f90a08f5f1a502 Liam R. Howlett 2022-04-26 720 unlink_anon_vmas(importer);
f90a08f5f1a502 Liam R. Howlett 2022-04-26 721 return -ENOMEM;
f90a08f5f1a502 Liam R. Howlett 2022-04-26 722 }
f90a08f5f1a502 Liam R. Howlett 2022-04-26 723
^1da177e4c3f41 Linus Torvalds 2005-04-16 724 if (file) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 725 mapping = file->f_mapping;
^1da177e4c3f41 Linus Torvalds 2005-04-16 726 root = &mapping->i_mmap;
cbc91f71b51b83 Srikar Dronamraju 2012-04-11 727 uprobe_munmap(vma, vma->vm_start, vma->vm_end);
682968e0c425c6 Srikar Dronamraju 2012-03-30 728
682968e0c425c6 Srikar Dronamraju 2012-03-30 729 if (adjust_next)
27ba0644ea9dfe Kirill A. Shutemov 2015-02-10 730 uprobe_munmap(next, next->vm_start, next->vm_end);
682968e0c425c6 Srikar Dronamraju 2012-03-30 731
83cde9e8ba95d1 Davidlohr Bueso 2014-12-12 732 i_mmap_lock_write(mapping);
^1da177e4c3f41 Linus Torvalds 2005-04-16 733 if (insert) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 734 /*
6b2dbba8b6ac4d Michel Lespinasse 2012-10-08 735 * Put into interval tree now, so instantiated pages
^1da177e4c3f41 Linus Torvalds 2005-04-16 736 * are visible to arm/parisc __flush_dcache_page
^1da177e4c3f41 Linus Torvalds 2005-04-16 737 * throughout; but we cannot insert into address
^1da177e4c3f41 Linus Torvalds 2005-04-16 738 * space until vma start or end is updated.
^1da177e4c3f41 Linus Torvalds 2005-04-16 739 */
^1da177e4c3f41 Linus Torvalds 2005-04-16 740 __vma_link_file(insert);
^1da177e4c3f41 Linus Torvalds 2005-04-16 741 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 742 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 743
012f18004da33b Rik van Riel 2010-08-09 744 anon_vma = vma->anon_vma;
bf181b9f9d8dfb Michel Lespinasse 2012-10-08 745 if (!anon_vma && adjust_next)
bf181b9f9d8dfb Michel Lespinasse 2012-10-08 746 anon_vma = next->anon_vma;
bf181b9f9d8dfb Michel Lespinasse 2012-10-08 747 if (anon_vma) {
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 748 VM_WARN_ON(adjust_next && next->anon_vma &&
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 749 anon_vma != next->anon_vma);
4fc3f1d66b1ef0 Ingo Molnar 2012-12-02 750 anon_vma_lock_write(anon_vma);
bf181b9f9d8dfb Michel Lespinasse 2012-10-08 751 anon_vma_interval_tree_pre_update_vma(vma);
bf181b9f9d8dfb Michel Lespinasse 2012-10-08 752 if (adjust_next)
bf181b9f9d8dfb Michel Lespinasse 2012-10-08 753 anon_vma_interval_tree_pre_update_vma(next);
bf181b9f9d8dfb Michel Lespinasse 2012-10-08 754 }
012f18004da33b Rik van Riel 2010-08-09 755
0fc48a6e213ab8 Wei Yang 2020-10-13 756 if (file) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 757 flush_dcache_mmap_lock(mapping);
6b2dbba8b6ac4d Michel Lespinasse 2012-10-08 758 vma_interval_tree_remove(vma, root);
^1da177e4c3f41 Linus Torvalds 2005-04-16 759 if (adjust_next)
6b2dbba8b6ac4d Michel Lespinasse 2012-10-08 760 vma_interval_tree_remove(next, root);
^1da177e4c3f41 Linus Torvalds 2005-04-16 761 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 762
d37371870ceb1d Michel Lespinasse 2012-12-11 763 if (start != vma->vm_start) {
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 764 if ((vma->vm_start < start) &&
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 765 (!insert || (insert->vm_end != start))) {
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 766 vma_mt_szero(mm, vma->vm_start, start);
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 767 VM_WARN_ON(insert && insert->vm_start > vma->vm_start);
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 768 } else {
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 769 vma_changed = true;
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 770 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 771 vma->vm_start = start;
d37371870ceb1d Michel Lespinasse 2012-12-11 772 }
d37371870ceb1d Michel Lespinasse 2012-12-11 773 if (end != vma->vm_end) {
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 774 if (vma->vm_end > end) {
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 775 if (!insert || (insert->vm_start != end)) {
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 776 vma_mt_szero(mm, end, vma->vm_end);
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 777 VM_WARN_ON(insert &&
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 778 insert->vm_end < vma->vm_end);
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 779 } else if (insert->vm_start == end) {
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 780 ll_prev = vma->vm_end;
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 781 }
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 782 } else {
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 783 vma_changed = true;
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 784 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 785 vma->vm_end = end;
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 @786 if (!next)
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 787 mm->highest_vm_end = vm_end_gap(vma);
d37371870ceb1d Michel Lespinasse 2012-12-11 788 }
f90a08f5f1a502 Liam R. Howlett 2022-04-26 789
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 790 if (vma_changed)
f90a08f5f1a502 Liam R. Howlett 2022-04-26 791 vma_mas_store(vma, &mas);
f90a08f5f1a502 Liam R. Howlett 2022-04-26 792
^1da177e4c3f41 Linus Torvalds 2005-04-16 793 vma->vm_pgoff = pgoff;
^1da177e4c3f41 Linus Torvalds 2005-04-16 794 if (adjust_next) {
f9d86a60572295 Wei Yang 2020-10-13 @795 next->vm_start += adjust_next;
f9d86a60572295 Wei Yang 2020-10-13 796 next->vm_pgoff += adjust_next >> PAGE_SHIFT;
f90a08f5f1a502 Liam R. Howlett 2022-04-26 797 vma_mas_store(next, &mas);
^1da177e4c3f41 Linus Torvalds 2005-04-16 798 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 799
0fc48a6e213ab8 Wei Yang 2020-10-13 800 if (file) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 801 if (adjust_next)
6b2dbba8b6ac4d Michel Lespinasse 2012-10-08 802 vma_interval_tree_insert(next, root);
6b2dbba8b6ac4d Michel Lespinasse 2012-10-08 803 vma_interval_tree_insert(vma, root);
^1da177e4c3f41 Linus Torvalds 2005-04-16 804 flush_dcache_mmap_unlock(mapping);
^1da177e4c3f41 Linus Torvalds 2005-04-16 805 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 806
^1da177e4c3f41 Linus Torvalds 2005-04-16 807 if (remove_next) {
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 808 __vma_unlink_list(mm, next);
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 809 /* Kill the cache */
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 810 vmacache_invalidate(mm);
^1da177e4c3f41 Linus Torvalds 2005-04-16 811 if (file)
^1da177e4c3f41 Linus Torvalds 2005-04-16 812 __remove_shared_vm_struct(next, file, mapping);
^1da177e4c3f41 Linus Torvalds 2005-04-16 813 } else if (insert) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 814 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 815 * split_vma has split insert from vma, and needs
^1da177e4c3f41 Linus Torvalds 2005-04-16 816 * us to insert it before dropping the locks
^1da177e4c3f41 Linus Torvalds 2005-04-16 817 * (it may either follow vma or precede it).
^1da177e4c3f41 Linus Torvalds 2005-04-16 818 */
dce94fc7a40fd9 Liam R. Howlett 2022-04-26 819 __insert_vm_struct(mm, &mas, insert, ll_prev);
^1da177e4c3f41 Linus Torvalds 2005-04-16 820 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 821
bf181b9f9d8dfb Michel Lespinasse 2012-10-08 822 if (anon_vma) {
bf181b9f9d8dfb Michel Lespinasse 2012-10-08 823 anon_vma_interval_tree_post_update_vma(vma);
bf181b9f9d8dfb Michel Lespinasse 2012-10-08 824 if (adjust_next)
bf181b9f9d8dfb Michel Lespinasse 2012-10-08 825 anon_vma_interval_tree_post_update_vma(next);
08b52706d50565 Konstantin Khlebnikov 2013-02-22 826 anon_vma_unlock_write(anon_vma);
bf181b9f9d8dfb Michel Lespinasse 2012-10-08 827 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 828
0fc48a6e213ab8 Wei Yang 2020-10-13 829 if (file) {
808fbdbea05f1e Wei Yang 2020-10-13 830 i_mmap_unlock_write(mapping);
7b2d81d48a2d8e Ingo Molnar 2012-02-17 831 uprobe_mmap(vma);
2b144498350860 Srikar Dronamraju 2012-02-09 832
2b144498350860 Srikar Dronamraju 2012-02-09 833 if (adjust_next)
7b2d81d48a2d8e Ingo Molnar 2012-02-17 834 uprobe_mmap(next);
2b144498350860 Srikar Dronamraju 2012-02-09 835 }
2b144498350860 Srikar Dronamraju 2012-02-09 836
^1da177e4c3f41 Linus Torvalds 2005-04-16 837 if (remove_next) {
925d1c401fa6cf Matt Helsley 2008-04-29 838 if (file) {
cbc91f71b51b83 Srikar Dronamraju 2012-04-11 839 uprobe_munmap(next, next->vm_start, next->vm_end);
^1da177e4c3f41 Linus Torvalds 2005-04-16 840 fput(file);
925d1c401fa6cf Matt Helsley 2008-04-29 841 }
5beb49305251e5 Rik van Riel 2010-03-05 842 if (next->anon_vma)
5beb49305251e5 Rik van Riel 2010-03-05 843 anon_vma_merge(vma, next);
^1da177e4c3f41 Linus Torvalds 2005-04-16 844 mm->map_count--;
3964acd0dbec12 Oleg Nesterov 2013-07-31 845 mpol_put(vma_policy(next));
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 846 BUG_ON(vma->vm_end < next->vm_end);
3928d4f5ee37cd Linus Torvalds 2018-07-21 847 vm_area_free(next);
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 848
^1da177e4c3f41 Linus Torvalds 2005-04-16 849 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 850 * In mprotect's case 6 (see comments on vma_merge),
^1da177e4c3f41 Linus Torvalds 2005-04-16 851 * we must remove another next too. It would clutter
^1da177e4c3f41 Linus Torvalds 2005-04-16 852 * up the code too much to do both in one go.
^1da177e4c3f41 Linus Torvalds 2005-04-16 853 */
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 854 if (remove_next != 3) {
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 855 /*
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 856 * If "next" was removed and vma->vm_end was
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 857 * expanded (up) over it, in turn
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 858 * "next->vm_prev->vm_end" changed and the
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 859 * "vma->vm_next" gap must be updated.
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 860 */
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 861 next = next_next;
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 862 } else {
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 863 /*
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 864 * For the scope of the comment "next" and
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 865 * "vma" considered pre-swap(): if "vma" was
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 866 * removed, next->vm_start was expanded (down)
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 867 * over it and the "next" gap must be updated.
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 868 * Because of the swap() the post-swap() "vma"
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 869 * actually points to pre-swap() "next"
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 870 * (post-swap() "next" as opposed is now a
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 871 * dangling pointer).
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 872 */
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 873 next = vma;
e86f15ee64d8ee Andrea Arcangeli 2016-10-07 874 }
734537c9cb725f Kirill A. Shutemov 2016-07-28 875 if (remove_next == 2) {
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 876 mas_reset(&mas);
734537c9cb725f Kirill A. Shutemov 2016-07-28 877 remove_next = 1;
734537c9cb725f Kirill A. Shutemov 2016-07-28 878 end = next->vm_end;
^1da177e4c3f41 Linus Torvalds 2005-04-16 879 goto again;
48c8a6f751a2c8 Liam R. Howlett 2022-04-26 880 } else if (!next) {
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 881 /*
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 882 * If remove_next == 2 we obviously can't
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 883 * reach this path.
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 884 *
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 885 * If remove_next == 3 we can't reach this
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 886 * path because pre-swap() next is always not
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 887 * NULL. pre-swap() "next" is not being
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 888 * removed and its next->vm_end is not altered
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 889 * (and furthermore "end" already matches
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 890 * next->vm_end in remove_next == 3).
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 891 *
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 892 * We reach this only in the remove_next == 1
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 893 * case if the "next" vma that was removed was
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 894 * the highest vma of the mm. However in such
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 895 * case next->vm_end == "end" and the extended
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 896 * "vma" has vma->vm_end == next->vm_end so
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 897 * mm->highest_vm_end doesn't need any update
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 898 * in remove_next == 1 case.
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 899 */
1be7107fbe18ee Hugh Dickins 2017-06-19 900 VM_WARN_ON(mm->highest_vm_end != vm_end_gap(vma));
fb8c41e9ad1f35 Andrea Arcangeli 2016-10-07 901 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 902 }
2b144498350860 Srikar Dronamraju 2012-02-09 903 if (insert && file)
7b2d81d48a2d8e Ingo Molnar 2012-02-17 904 uprobe_mmap(insert);
^1da177e4c3f41 Linus Torvalds 2005-04-16 905
^1da177e4c3f41 Linus Torvalds 2005-04-16 906 validate_mm(mm);
5beb49305251e5 Rik van Riel 2010-03-05 907 return 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 908 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 909
:::::: The code at line 795 was first introduced by commit
:::::: f9d86a60572295ebb53c87a4305dc89b487711bd mm/mmap: leave adjust_next as virtual address instead of page frame number
:::::: TO: Wei Yang <richard.weiyang@linux.alibaba.com>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-04-30 21:44 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-30 21:44 [hnaz-mm:master 292/410] mm/mmap.c:795 __vma_adjust() error: we previously assumed 'next' could be null (see line 786) kernel test robot
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.