From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752825AbcBFSTC (ORCPT ); Sat, 6 Feb 2016 13:19:02 -0500 Received: from mail-pa0-f44.google.com ([209.85.220.44]:33141 "EHLO mail-pa0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752652AbcBFSS6 (ORCPT ); Sat, 6 Feb 2016 13:18:58 -0500 Date: Sat, 6 Feb 2016 10:18:56 -0800 From: Jeremiah Mahler To: Andrew Morton Cc: linux-kernel@vger.kernel.org, Matthew Wilcox , Hugh Dickins , Mel Gorman , Stephen Rothwell , Konstantin Khlebnikov Subject: Re: [REGRESSION] mm: filemap_map_pages NULL pointer dereference Message-ID: <20160206181856.GA7465@hudson.localdomain> Mail-Followup-To: Jeremiah Mahler , Andrew Morton , linux-kernel@vger.kernel.org, Matthew Wilcox , Hugh Dickins , Mel Gorman , Stephen Rothwell , Konstantin Khlebnikov References: <20160205180502.GA5869@hudson.localdomain> <20160205141940.ecc0110b00347a264c868c43@linux-foundation.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160205141940.ecc0110b00347a264c868c43@linux-foundation.org> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Andrew, On Fri, Feb 05, 2016 at 02:19:40PM -0800, Andrew Morton wrote: > On Fri, 5 Feb 2016 10:05:02 -0800 Jeremiah Mahler wrote: > [...] > > unable to handle kernel NULL pointer dereference > > This should fix it up. > [...] > > include/linux/radix-tree.h | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff -puN include/linux/radix-tree.h~radix-tree-fix-oops-after-radix_tree_iter_retry include/linux/radix-tree.h > --- a/include/linux/radix-tree.h~radix-tree-fix-oops-after-radix_tree_iter_retry > +++ a/include/linux/radix-tree.h > @@ -400,7 +400,7 @@ void **radix_tree_iter_retry(struct radi > * @iter: pointer to radix tree iterator > * Returns: current chunk size > */ > -static __always_inline unsigned > +static __always_inline long > radix_tree_chunk_size(struct radix_tree_iter *iter) > { > return iter->next_index - iter->index; > @@ -434,9 +434,9 @@ radix_tree_next_slot(void **slot, struct > return slot + offset + 1; > } > } else { > - unsigned size = radix_tree_chunk_size(iter) - 1; > + long size = radix_tree_chunk_size(iter); > > - while (size--) { > + while (--size > 0) { > slot++; > iter->index++; > if (likely(*slot)) > _ > I have applied this patch to my kernel and so far the bug has not come back. Thanks for the quick fix. Although I don't quite understand how this fixes the slot==NULL problem. Unless I am missing something, it looks like the while loop will be executed the same number of times but the size variable will no longer go negative as it did before. -- - Jeremiah Mahler