On Tue, Mar 3, 2015 at 9:36 PM, Michal Hocko <mhocko@xxxxxxx> wrote: > On Tue 03-03-15 20:02:15, Leon Yu wrote: >> I have constantly stumbled upon "kernel BUG at mm/rmap.c:399!" after upgrading >> to 3.19 and had no luck with 4.0-rc1 neither. >> >> So, after looking into new logic introduced by commit 7a3ef208e662, ("mm: >> prevent endless growth of anon_vma hierarchy"), I found chances are that >> unlink_anon_vmas() is called without incrementing dst->anon_vma->degree in >> anon_vma_clone() due to allocation failure. If dst->anon_vma is not NULL in >> error path, its degree will be incorrectly decremented in unlink_anon_vmas() >> and eventually underflow when exiting as a result of another call to >> unlink_anon_vmas(). That's how "kernel BUG at mm/rmap.c:399!" is triggered >> for me. >> >> This patch fixes the underflow by dropping dst->anon_vma when allocation >> fails. It's safe to do so regardless of original value of dst->anon_vma >> because dst->anon_vma doesn't have valid meaning if anon_vma_clone() fails. >> Besides, callers don't care dst->anon_vma in such case neither. >> >> Signed-off-by: Leon Yu <chianglungyu@xxxxxxxxx> >> Fixes: 7a3ef208e662 ("mm: prevent endless growth of anon_vma hierarchy") >> Cc: stable@xxxxxxxxxxxxxxx # v3.19 > > Reviewed-by: Michal Hocko <mhocko@xxxxxxx> > > I think we can safely remove the following code as well, because it is > anon_vma_clone which is responsible to do all the cleanups. Thanks for the input, I'll send v2 with your cleanup. - Leon > diff --git a/mm/mmap.c b/mm/mmap.c > index 943c6ad18b1d..06a6076c92e5 100644 > --- a/mm/mmap.c > +++ b/mm/mmap.c > @@ -774,10 +774,8 @@ again: remove_next = 1 + (end > next->vm_end); > > importer->anon_vma = exporter->anon_vma; > error = anon_vma_clone(importer, exporter); > - if (error) { > - importer->anon_vma = NULL; > + if (error) > return error; > - } > } > } -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html