Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751198AbdFBJju (ORCPT ); Fri, 2 Jun 2017 05:39:50 -0400 Received: from pegase1.c-s.fr ([93.17.236.30]:36332 "EHLO pegase1.c-s.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750813AbdFBJjs (ORCPT ); Fri, 2 Jun 2017 05:39:48 -0400 Subject: Re: [PATCH 2/5] powerpc/mm: split store_updates_sp() in two parts in do_page_fault() To: Michael Ellerman , Benjamin Herrenschmidt , Paul Mackerras , Scott Wood Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org References: <58f17a04cee5726467ef4e283dfbd7da68fa6ab4.1492606298.git.christophe.leroy@c-s.fr> <871sr23flh.fsf@concordia.ellerman.id.au> From: Christophe LEROY Message-ID: <6daf8f4e-9b39-d585-2c64-9b0348fef123@c-s.fr> Date: Fri, 2 Jun 2017 11:39:23 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1 MIME-Version: 1.0 In-Reply-To: <871sr23flh.fsf@concordia.ellerman.id.au> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: fr Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 931 Lines: 28 Le 02/06/2017 à 11:26, Michael Ellerman a écrit : > Christophe Leroy writes: > >> Only the get_user() in store_updates_sp() has to be done outside >> the mm semaphore. All the comparison can be done within the semaphore, >> so only when really needed. >> >> As we got a DSI exception, the address pointed by regs->nip is >> obviously valid, otherwise we would have had a instruction exception. >> So __get_user() can be used instead of get_user() > > I don't think that part is true. > > You took a DSI so there *was* an instruction at NIP, but since then it > may have been unmapped by another thread. > > So I don't think you can assume the get_user() will succeed. > The difference between get_user() and __get_user() is that get_user() performs an access_ok() in addition. Doesn't access_ok() only checks whether addr is below TASK_SIZE to ensure it is a valid user address ? Christophe