Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp625064ybl; Thu, 23 Jan 2020 05:01:13 -0800 (PST) X-Google-Smtp-Source: APXvYqz9n0xlc8tS0t8wZloSafdH08yfWxMmV0xaizIlBW1+8MacnbA7lUYBVusUjJYIM96/enT/ X-Received: by 2002:a05:6830:1f13:: with SMTP id u19mr10878890otg.237.1579784473114; Thu, 23 Jan 2020 05:01:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579784473; cv=none; d=google.com; s=arc-20160816; b=p2mw+wL6FjETbitjupsgYuXAkmBTbULe9O0epNdl99jqex7i6dF2UFcrvKy2ZXQWg0 EUaeBc+4wKx2pOUZGAeA1IDg0FQmtdSEQHNB37tLwjLpRlhopCns8HZ7qGWy97VH872b XNWFZRhqOccD8/IzkytLg1Tf20I3hgsZ2Y0l0lSt452HNduqmbIly2K9D///y3ONR9BG K3gr/I5NcYYsJtpjgLXmKg6zN+4QyBmKb1HuEACsfMaIZdDm9cRMM4XcEJkSaFl7yqhv CEIbNp85Jnb5EYIUYQLckJU+PWDRffgWS6+p8/Fkpcx5ns0gjBUBRvupBIdFzbcpbcnw 6FrA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:cc:to:subject:from:references :in-reply-to:message-id:dkim-signature; bh=9n0DhrUtn+3U5yRRYzDBPdkThpSiP75IUKn1XEEM8og=; b=0BeqPYaFP9aa77KpoARVxNb7A9ln34KwsTXNbNwmJZPpIdSn8D6bLx2haU1Jg+JpB0 WdPrymd18CQOy+u90cvcwcVVJEI5o96MapEiDKRKg85aBpANyM1BaC/zLim+yGfg/STO /QduzROdH8yKPGZjWFD73t6wVIS5AUbwNk/UnK6cFxEDEG+H5+I+oznteSbUXPkN5z2J n79A1JxBojvjjXsn6RqQyWwIODMQ8MRpBlnVV+tFAShoTvFkAW1DQFlBzJ3neM66hnCh x2Srlf9d7CCRBtdpPi4sP2CjHPmTY/wg/shmf9Rl8DY3rJ30NIZ3hZmCkjbnwtt34R1d dK4A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=nBdpb5YM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g26si1195909otj.32.2020.01.23.05.01.00; Thu, 23 Jan 2020 05:01:13 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=nBdpb5YM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728939AbgAWNAB (ORCPT + 99 others); Thu, 23 Jan 2020 08:00:01 -0500 Received: from pegase1.c-s.fr ([93.17.236.30]:50177 "EHLO pegase1.c-s.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728792AbgAWM77 (ORCPT ); Thu, 23 Jan 2020 07:59:59 -0500 Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 483Mn75tf2z9vB4d; Thu, 23 Jan 2020 13:59:55 +0100 (CET) Authentication-Results: localhost; dkim=pass reason="1024-bit key; insecure key" header.d=c-s.fr header.i=@c-s.fr header.b=nBdpb5YM; dkim-adsp=pass; dkim-atps=neutral X-Virus-Scanned: Debian amavisd-new at c-s.fr Received: from pegase1.c-s.fr ([192.168.12.234]) by localhost (pegase1.c-s.fr [192.168.12.234]) (amavisd-new, port 10024) with ESMTP id 2VSHYc83-jVL; Thu, 23 Jan 2020 13:59:55 +0100 (CET) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase1.c-s.fr (Postfix) with ESMTP id 483Mn74sRwz9vB4X; Thu, 23 Jan 2020 13:59:55 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1579784395; bh=9n0DhrUtn+3U5yRRYzDBPdkThpSiP75IUKn1XEEM8og=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=nBdpb5YMmUh2lNpfEL+Gta03snuJRNE2vRku/B1r85tUbHzfLEgwusl207xVbrUJB gOCwiorGN+yt7yJ7p3OV21jba8iolfaF/JPi8vpOLbwlQbD8eRLND3hd5OHauAx+T2 Uf3flEYujkol17gOoxK1ddCLi6P4WItJSw1b8TkI= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id BB0C98B82C; Thu, 23 Jan 2020 13:59:56 +0100 (CET) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id 14fKxtcIuTAx; Thu, 23 Jan 2020 13:59:56 +0100 (CET) Received: from po14934vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 804798B826; Thu, 23 Jan 2020 13:59:56 +0100 (CET) Received: by po14934vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 5757E651C0; Thu, 23 Jan 2020 12:59:56 +0000 (UTC) Message-Id: <8374d73eced8ac93d756e606ca64c6c3140c8ea8.1579783936.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v3 5/7] powerpc/32s: Drop NULL addr verification To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org Date: Thu, 23 Jan 2020 12:59:56 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org NULL addr is a user address. Don't waste time checking it. If someone tries to access it, it will SIGFAULT the same way as for address 1, so no need to make it special. The special case is when not doing a write, in that case we want to drop the entire function. This is now handled by 'dir' param and not by the nulity of 'to' anymore. Also make beginning of prevent_user_access() similar to beginning of allow_user_access(), and tell the compiler that writing in kernel space or with a 0 length is unlikely Signed-off-by: Christophe Leroy --- v2: no change v3: no change --- arch/powerpc/include/asm/book3s/32/kup.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/arch/powerpc/include/asm/book3s/32/kup.h b/arch/powerpc/include/asm/book3s/32/kup.h index d765515bd1c1..3c1798e56b55 100644 --- a/arch/powerpc/include/asm/book3s/32/kup.h +++ b/arch/powerpc/include/asm/book3s/32/kup.h @@ -113,7 +113,7 @@ static __always_inline void allow_user_access(void __user *to, const void __user addr = (__force u32)to; - if (!addr || addr >= TASK_SIZE || !size) + if (unlikely(addr >= TASK_SIZE || !size)) return; end = min(addr + size, TASK_SIZE); @@ -124,16 +124,18 @@ static __always_inline void allow_user_access(void __user *to, const void __user static __always_inline void prevent_user_access(void __user *to, const void __user *from, u32 size, unsigned long dir) { - u32 addr = (__force u32)to; - u32 end = min(addr + size, TASK_SIZE); + u32 addr, end; BUILD_BUG_ON(!__builtin_constant_p(dir)); if (!(dir & KUAP_W)) return; - if (!addr || addr >= TASK_SIZE || !size) + addr = (__force u32)to; + + if (unlikely(addr >= TASK_SIZE || !size)) return; + end = min(addr + size, TASK_SIZE); current->thread.kuap = 0; kuap_update_sr(mfsrin(addr) | SR_KS, addr, end); /* set Ks */ } -- 2.25.0