Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp4799638ybl; Wed, 22 Jan 2020 05:02:36 -0800 (PST) X-Google-Smtp-Source: APXvYqySgMPDzPpVNsod36SiaNA2xFEhKvYc+utWtaon3X9VvTF3nAJX3EY+YabTi+vNvti1Jh5K X-Received: by 2002:a9d:76cb:: with SMTP id p11mr7393711otl.7.1579698156681; Wed, 22 Jan 2020 05:02:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579698156; cv=none; d=google.com; s=arc-20160816; b=W7ihc7m1UyUr2dLkZqfKQ1ISYZMme9aC5Qr0HepyBZReLgif5mm+fG877E2jvfLyG/ Cz1SHBor3VBjW9DQS9xA1eeE0QAjBcDNAyzRRVOW0vmLiYTTWmlvmzjq5gWtkeAHjNL8 NgyUWP+NrbZrPp5wRKnGkeH/LhFCWwan1nnvbm0rORCGuJW1NYcWDmFRPm22xh1Xtr/6 gaunCNT7N1MMpuwoW6TrE+ddW0oi3qcFXE5lOfhL+RS3P2dVh/FXhOa/9af2R6EUtMJ5 nYGRyOcnHf+HsVuyTMT2P5b/9HXgZVvFuCTa3TqRlGzcNavn4mtFYRGeuLuWwg8Trv1h liyA== 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=p9gINth/nDuzFeykCT9Ex40uYSsIuyztIe3V1N19VeY=; b=ugIalu2aEnK1Xk25T6bSBLvXbrFslVArMNHwMtxjKNNytK7u0o4fAmO5EzR4mxY6j1 RCIwu+UtOKXRJEvJGQ+L7KaE0cKuP4/RLHD5WkpXpTy/VtQnGNYfUTutG8kFPJwBLNbC rw1KRpPlly5SvGWphtJbT3TrdIqdelu3xAg3MxJcXkRUnI4j+w6NrEjTaQzWiY8vxHrI +5mxAJBM+Pg0t9jwlX5I6NylFC3IUFvHI4V8IvlPWyxB1cpRGzMhOsXR29kuJs9LNE9x cFIEiL41g2+2g/Eb+hTub+rLExOHgOf6LXIKZ6yoDpEsWncemjd+VcAF9MsIkVLGJkcb GIQg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=asxrAUK4; 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 m25si24259325otr.310.2020.01.22.05.02.24; Wed, 22 Jan 2020 05:02:36 -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=asxrAUK4; 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 S1729260AbgAVNA6 (ORCPT + 99 others); Wed, 22 Jan 2020 08:00:58 -0500 Received: from pegase1.c-s.fr ([93.17.236.30]:21233 "EHLO pegase1.c-s.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728731AbgAVNAl (ORCPT ); Wed, 22 Jan 2020 08:00:41 -0500 Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 482lrQ0w0Pz9v4T5; Wed, 22 Jan 2020 14:00:38 +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=asxrAUK4; 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 K994pD9OcgtK; Wed, 22 Jan 2020 14:00:38 +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 482lrP6xDNz9v4T4; Wed, 22 Jan 2020 14:00:37 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1579698038; bh=p9gINth/nDuzFeykCT9Ex40uYSsIuyztIe3V1N19VeY=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=asxrAUK4apDAM78ttunvrwObfFC3Uuc7voda+IWzqCEpDmNIDllZ0k37f3a692EWq nSg0ZpuCIxgdfFyYvYqAPdvj+YA+CHFe2ZrxJBbEqOumIyXKGqmz5kK1MvefLgInPS GwEDO3+HsvL2HO7SCWe13SRLgAmCUdgtvpMMJfnw= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id EBAEE8B7FA; Wed, 22 Jan 2020 14:00:38 +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 KO4zAQH-MR6m; Wed, 22 Jan 2020 14:00:38 +0100 (CET) Received: from po14934vm.idsi0.si.c-s.fr (po15451.idsi0.si.c-s.fr [172.25.230.100]) by messagerie.si.c-s.fr (Postfix) with ESMTP id C19F18B800; Wed, 22 Jan 2020 14:00:38 +0100 (CET) Received: by po14934vm.idsi0.si.c-s.fr (Postfix, from userid 0) id B9621651E0; Wed, 22 Jan 2020 13:00:38 +0000 (UTC) Message-Id: <35e82a783b398c085e7e76d2bc754cc831c87541.1579697910.git.christophe.leroy@c-s.fr> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v1 4/6] 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: Wed, 22 Jan 2020 13:00:38 +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 --- 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