Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755281AbaDVN0J (ORCPT ); Tue, 22 Apr 2014 09:26:09 -0400 Received: from mail-ee0-f54.google.com ([74.125.83.54]:49916 "EHLO mail-ee0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754756AbaDVN0F (ORCPT ); Tue, 22 Apr 2014 09:26:05 -0400 Date: Tue, 22 Apr 2014 15:25:59 +0200 From: Andreas Herrmann To: Davidlohr Bueso Cc: akpm@linux-foundation.org, zeus@gnu.org, aswin@hp.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Ralf Baechle , linux-mips@linux-mips.org Subject: Re: [PATCH 3/6] mips: call find_vma with the mmap_sem held Message-ID: <20140422132559.GD10997@alberich> References: <1397960791-16320-1-git-send-email-davidlohr@hp.com> <1397960791-16320-4-git-send-email-davidlohr@hp.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <1397960791-16320-4-git-send-email-davidlohr@hp.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, Apr 19, 2014 at 07:26:28PM -0700, Davidlohr Bueso wrote: > Performing vma lookups without taking the mm->mmap_sem is asking > for trouble. While doing the search, the vma in question can be > modified or even removed before returning to the caller. Take the > lock (exclusively) in order to avoid races while iterating through > the vmacache and/or rbtree. > > Updates two functions: > - process_fpemu_return() > - cteon_flush_cache_sigtramp() > > This patch is completely *untested*. > > Signed-off-by: Davidlohr Bueso > Cc: Ralf Baechle > Cc: linux-mips@linux-mips.org Tested-by: Andreas Herrmann Thanks, Andreas > --- > arch/mips/kernel/traps.c | 2 ++ > arch/mips/mm/c-octeon.c | 2 ++ > 2 files changed, 4 insertions(+) > > diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c > index 074e857..c51bd20 100644 > --- a/arch/mips/kernel/traps.c > +++ b/arch/mips/kernel/traps.c > @@ -712,10 +712,12 @@ int process_fpemu_return(int sig, void __user *fault_addr) > si.si_addr = fault_addr; > si.si_signo = sig; > if (sig == SIGSEGV) { > + down_read(¤t->mm->mmap_sem); > if (find_vma(current->mm, (unsigned long)fault_addr)) > si.si_code = SEGV_ACCERR; > else > si.si_code = SEGV_MAPERR; > + up_read(¤t->mm->mmap_sem); > } else { > si.si_code = BUS_ADRERR; > } > diff --git a/arch/mips/mm/c-octeon.c b/arch/mips/mm/c-octeon.c > index f41a5c5..05b1d7c 100644 > --- a/arch/mips/mm/c-octeon.c > +++ b/arch/mips/mm/c-octeon.c > @@ -137,8 +137,10 @@ static void octeon_flush_cache_sigtramp(unsigned long addr) > { > struct vm_area_struct *vma; > > + down_read(¤t->mm->mmap_sem); > vma = find_vma(current->mm, addr); > octeon_flush_icache_all_cores(vma); > + up_read(¤t->mm->mmap_sem); > } > > > -- > 1.8.1.4 > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/