From patchwork Sat May 15 10:18:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 1478852 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2001:8b0:10b:1:d65d:64ff:fe57:4e05; helo=desiato.infradead.org; envelope-from=linux-snps-arc-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=desiato.20200630 header.b=Wf3uob1T; dkim=fail reason="signature verification failed" (2048-bit key; secure) header.d=infradead.org header.i=@infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=wU1JLmm9; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20201202 header.b=bjky3cSu; dkim-atps=neutral Received: from desiato.infradead.org (desiato.infradead.org [IPv6:2001:8b0:10b:1:d65d:64ff:fe57:4e05]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Fj1bX5688z9sWP for ; Sat, 15 May 2021 20:19:36 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Aab8FxvkVkjsMn/oTNuVO//D8VAHGwoDW7rBj+WhhV8=; b=Wf3uob1TlC+tSdIM3ADfu93Za wdF1CiT+gm9oIZ40pOTtTLWA7yQ7ItQ7ZEpzPl1WPrzRNG/VKJPzxmrJ/ebD1NYZpw17j2L05Sk6H YBfqs/q5R2SuLzgzSv8ZArtM6JjomuioFnN3TcBGrKEazxvFK80UY5nVXtrYzhmUKUKzjUXNjTAtA MHQhMckVBcT4l9H+anyJ2a+y68yvhzzT4mBfCMyy6kyz0tA/0qhLGftzohUR3vzLRoznLLwLKmAFs Hl2bjvTcOuWSk5Mjp6oh2/Y9meXvNrMpcL22Ix/wYeGWOfhOKvjTxunrGj23R5pum2on7aW3Y+2Vv O7jkXILzw==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lhrOP-00A8iF-R9; Sat, 15 May 2021 10:19:34 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lhrOD-00A8cO-47; Sat, 15 May 2021 10:19:21 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description; bh=NaqXJV908V1jIAVejU+NdX55MLC7FA58Fe0o+EeCqG4=; b=wU1JLmm9mUirjVwBwAwpxvJZFm IFkiBwBTuzZDHbvrNtERcmMRFyFM/3q+coQnjklMDuLOczJ7PAxaIjIyA68MPwhTey+hgGdTITSnZ /66pSSNIHhdlLKK1C+/E3lARU9Rn58BObZUnT6D5ON/YyUdkVAnCQa0qLvMcjcorp7FuseduM8iDP u8fw5DtqWXtGuDNcHtmEpz9DeuJ2TPBjvdKfPSOHIHLz14GS0x0wOUljMN8S2eU/01XJbRdUoCyBq OF3PXEXwOL0m/fJ1EtKHw2DQRWYPBDb+kJikvPAb/OjgT8yvH3vB8OBu8R5irLDIb8ETkrkCRQcrU sbSbrxWQ==; Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lhrOA-00CU5X-FI; Sat, 15 May 2021 10:19:19 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 0B335613ED; Sat, 15 May 2021 10:19:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1621073958; bh=5EiV6+uSoRXpKB9TPWxNu5WmBqsPjct5G2z66NyP0fw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bjky3cSuDqZIES1KbepcV5Oby6RvxvISRH0AGI4mDxg/BM6uDnjAapszFc+ptgQNt J0tcmi3xigYXX6LJOuynlQSBPrO9WxPj+DHGujJh2g321TLT2yXZIWKChiUclVzNT4 e58Rf8vzaJI19p63w017oebZKBmnLE1JxFJ1EqoB+mcwLFkW7KFxUSpVniv3oWMjB/ AbImTti61Fc9PLzwUugONY6MJ21I7VRetVRK7MGExtcfjVaYKiPP3HYU+Cv6SlyudR o0/Wn48mXsLWAkQpjkkDV0eSXkAeuZeYrNAIMxNEqrbMd6pJyq6LaoRglM9p2zd//o ggJFHQ3qZVlvw== From: Arnd Bergmann To: linux-arch@vger.kernel.org Cc: Arnd Bergmann , Christoph Hellwig , Al Viro , Vineet Gupta , Yoshinori Sato , Brian Cain , Geert Uytterhoeven , Paul Walmsley , Palmer Dabbelt , Albert Ou , Jeff Dike , Richard Weinberger , Anton Ivanov , Sid Manning , Andrew Morton , Mike Rapoport , linux-snps-arc@lists.infradead.org, linux-kernel@vger.kernel.org, uclinux-h8-devel@lists.sourceforge.jp, linux-hexagon@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-riscv@lists.infradead.org, linux-um@lists.infradead.org Subject: [PATCH 4/6] [v2] arc: use generic strncpy/strnlen from_user Date: Sat, 15 May 2021 12:18:01 +0200 Message-Id: <20210515101803.924427-5-arnd@kernel.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210515101803.924427-1-arnd@kernel.org> References: <20210515101803.924427-1-arnd@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210515_031918_576644_7FE31180 X-CRM114-Status: GOOD ( 11.49 ) X-Spam-Score: -5.5 (-----) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From: Arnd Bergmann Most per-architecture versions of these functions are broken in some form, and they are almost certainly slower than the generic code as well. This version is fairly slow because it always does byte accesses even for aligned data, and its checks for user_addr_max() differ from the generic code. Content analysis details: (-5.5 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at https://www.dnswl.org/, high trust [198.145.29.99 listed in list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.3 DKIMWL_WL_HIGH DKIMwl.org - High trust sender X-BeenThere: linux-snps-arc@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux on Synopsys ARC Processors List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-snps-arc" Errors-To: linux-snps-arc-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Arnd Bergmann Most per-architecture versions of these functions are broken in some form, and they are almost certainly slower than the generic code as well. This version is fairly slow because it always does byte accesses even for aligned data, and its checks for user_addr_max() differ from the generic code. Remove the ones for arc and instead use the generic version. Signed-off-by: Arnd Bergmann --- arch/arc/Kconfig | 2 + arch/arc/include/asm/uaccess.h | 83 ++-------------------------------- arch/arc/mm/extable.c | 12 ----- 3 files changed, 7 insertions(+), 90 deletions(-) diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig index 2d98501c0897..a38f403a8811 100644 --- a/arch/arc/Kconfig +++ b/arch/arc/Kconfig @@ -27,6 +27,8 @@ config ARC select GENERIC_PENDING_IRQ if SMP select GENERIC_SCHED_CLOCK select GENERIC_SMP_IDLE_THREAD + select GENERIC_STRNCPY_FROM_USER + select GENERIC_STRNLEN_USER select HAVE_ARCH_KGDB select HAVE_ARCH_TRACEHOOK select HAVE_ARCH_TRANSPARENT_HUGEPAGE if ARC_MMU_V4 diff --git a/arch/arc/include/asm/uaccess.h b/arch/arc/include/asm/uaccess.h index 3476348f361e..754a23f26736 100644 --- a/arch/arc/include/asm/uaccess.h +++ b/arch/arc/include/asm/uaccess.h @@ -655,96 +655,23 @@ static inline unsigned long __arc_clear_user(void __user *to, unsigned long n) return res; } -static inline long -__arc_strncpy_from_user(char *dst, const char __user *src, long count) -{ - long res = 0; - char val; - - if (!access_ok(src, 1)) - return -EFAULT; - - if (count == 0) - return 0; - - __asm__ __volatile__( - " mov lp_count, %5 \n" - " lp 3f \n" - "1: ldb.ab %3, [%2, 1] \n" - " breq.d %3, 0, 3f \n" - " stb.ab %3, [%1, 1] \n" - " add %0, %0, 1 # Num of NON NULL bytes copied \n" - "3: \n" - " .section .fixup, \"ax\" \n" - " .align 4 \n" - "4: mov %0, %4 # sets @res as -EFAULT \n" - " j 3b \n" - " .previous \n" - " .section __ex_table, \"a\" \n" - " .align 4 \n" - " .word 1b, 4b \n" - " .previous \n" - : "+r"(res), "+r"(dst), "+r"(src), "=r"(val) - : "g"(-EFAULT), "r"(count) - : "lp_count", "memory"); - - return res; -} - -static inline long __arc_strnlen_user(const char __user *s, long n) -{ - long res, tmp1, cnt; - char val; - - if (!access_ok(s, 1)) - return 0; - - __asm__ __volatile__( - " mov %2, %1 \n" - "1: ldb.ab %3, [%0, 1] \n" - " breq.d %3, 0, 2f \n" - " sub.f %2, %2, 1 \n" - " bnz 1b \n" - " sub %2, %2, 1 \n" - "2: sub %0, %1, %2 \n" - "3: ;nop \n" - " .section .fixup, \"ax\" \n" - " .align 4 \n" - "4: mov %0, 0 \n" - " j 3b \n" - " .previous \n" - " .section __ex_table, \"a\" \n" - " .align 4 \n" - " .word 1b, 4b \n" - " .previous \n" - : "=r"(res), "=r"(tmp1), "=r"(cnt), "=r"(val) - : "0"(s), "1"(n) - : "memory"); - - return res; -} - #ifndef CONFIG_CC_OPTIMIZE_FOR_SIZE #define INLINE_COPY_TO_USER #define INLINE_COPY_FROM_USER #define __clear_user(d, n) __arc_clear_user(d, n) -#define strncpy_from_user(d, s, n) __arc_strncpy_from_user(d, s, n) -#define strnlen_user(s, n) __arc_strnlen_user(s, n) #else extern unsigned long arc_clear_user_noinline(void __user *to, unsigned long n); -extern long arc_strncpy_from_user_noinline (char *dst, const char __user *src, - long count); -extern long arc_strnlen_user_noinline(const char __user *src, long n); - #define __clear_user(d, n) arc_clear_user_noinline(d, n) -#define strncpy_from_user(d, s, n) arc_strncpy_from_user_noinline(d, s, n) -#define strnlen_user(s, n) arc_strnlen_user_noinline(s, n) - #endif +extern long strncpy_from_user(char *dst, const char __user *src, long count); +#define strncpy_from_user(d, s, n) strncpy_from_user(d, s, n) +extern long strnlen_user(const char __user *src, long n); +#define strnlen_user(s, n) strnlen_user(s, n) + #include #include diff --git a/arch/arc/mm/extable.c b/arch/arc/mm/extable.c index b06b09ddf924..4e14c4244ea2 100644 --- a/arch/arc/mm/extable.c +++ b/arch/arc/mm/extable.c @@ -32,16 +32,4 @@ unsigned long arc_clear_user_noinline(void __user *to, } EXPORT_SYMBOL(arc_clear_user_noinline); -long arc_strncpy_from_user_noinline(char *dst, const char __user *src, - long count) -{ - return __arc_strncpy_from_user(dst, src, count); -} -EXPORT_SYMBOL(arc_strncpy_from_user_noinline); - -long arc_strnlen_user_noinline(const char __user *src, long n) -{ - return __arc_strnlen_user(src, n); -} -EXPORT_SYMBOL(arc_strnlen_user_noinline); #endif