Ning Qu wrote: > Btw, should we first check if page returned by radix_tree_deref_slot is NULL? Yes, we should. I don't know how I missed that. :( The patch below should address both issues. >From dca24c9a1f31ee1599fe81e9a60d4f87a4eaf0ea Mon Sep 17 00:00:00 2001 From: "Kirill A. Shutemov" <kirill.shutemov@xxxxxxxxxxxxxxx> Date: Mon, 3 Mar 2014 12:07:03 +0200 Subject: [PATCH] mm: filemap_map_pages() avoid dereference NULL/exception slots radix_tree_deref_slot() can return NULL: add missed check. Do no dereference 'page': we can get there as result of radix_tree_exception(page) check. Reported-by: Hugh Dickins <hughd@xxxxxxxxxx> Reported-by: Ning Qu <quning@xxxxxxxxxx> Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> --- mm/filemap.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mm/filemap.c b/mm/filemap.c index 5f4fe7f0c258..e48624634927 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1745,6 +1745,8 @@ void filemap_map_pages(struct vm_area_struct *vma, struct vm_fault *vmf) break; repeat: page = radix_tree_deref_slot(slot); + if (unlikely(!page)) + goto next; if (radix_tree_exception(page)) { if (radix_tree_deref_retry(page)) break; @@ -1790,7 +1792,7 @@ unlock: skip: page_cache_release(page); next: - if (page->index == vmf->max_pgoff) + if (iter.index == vmf->max_pgoff) break; } rcu_read_unlock(); -- Kirill A. Shutemov -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html