Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp511503pxv; Thu, 22 Jul 2021 05:52:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxgEJUS8yTq1uw7BSSNx9ThbOiivMrhAbjOYS/EXT6+ljj3aSTXB70lOi8KwkmrhjUtyB3J X-Received: by 2002:a17:906:9b1:: with SMTP id q17mr23123083eje.546.1626958379538; Thu, 22 Jul 2021 05:52:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626958379; cv=none; d=google.com; s=arc-20160816; b=aK7VbAnY6VA0Mhl2YLwUutnUYCNdzlpy683GKIqiPFMsHWnqAXM6a5XFom91FLq8pd wDVlthJF+T27Q9fZ5bd7Xk0325a2bsiJJHxngNX5Zl24JdIymAW7gumL3M5/pgpIx4fK AIXtZsQZ1OX8CUrzMIqE0RJkLPjlGjDGLAi9Rg4NGHHE6q/Sy81kPafDpDJh5YnBA0dA wgtJUimtrq9gWG9tCIzwY4HvjfPnxrJHzOZgmh1m+U5xZdF6BwmheOV+j0pEuMCw7vAz J61ZeTaPnjOXovoGBqAMr4KGdc+yr0kHuUoIRpBMLcfXJolWED4MvoK9HyUOhyy1MmmI CgPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=q/+URAk3y8WRSxvrL/+fD4sEQ/5jja/anc99lYx1U7o=; b=ZRvrKSTqwy2//EDZ16iz5q8j8BTIshKhP4JScXq+pI6+WBb5OuwO5Bc5umli+ChQSS dStQ/NpUcRvnRJlN3Ya9QcwEupj4t5qNoOGCCPhaVE5j3vwvdNmP7ZC6phM4KR/WBQ2X 1Ut+8IhhQBgodfi26vJn2URStMsNWDRMs7g7B0840qqcP8E6PncSfCGHewFOM5LhU3yg uxekXabD3W0+5a3F28LqpLxIH0p5XTEGIXX4gscsghqhIhOzwp6EZdoYDehuRzq3L4wj KxD7XJjoaJytoMKUOQ7Lr2las6CLHZgGommq6TEvZYwoZZEQN8qnjuyeDkbH5BHoo9nB 6yfg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=M4JNqHkT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b22si29953339ejc.675.2021.07.22.05.52.36; Thu, 22 Jul 2021 05:52:59 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=M4JNqHkT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232016AbhGVMIs (ORCPT + 99 others); Thu, 22 Jul 2021 08:08:48 -0400 Received: from mail.kernel.org ([198.145.29.99]:32940 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231840AbhGVMIk (ORCPT ); Thu, 22 Jul 2021 08:08:40 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 6ADE7613BB; Thu, 22 Jul 2021 12:49:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1626958155; bh=tqJH0vqxcWhhn0NnJI/oW7Rihc47OssJOxXQlI4xJ40=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=M4JNqHkT5asZDoDPWdngOvampfrrZBn/xbxxnUQ0F8obR6jcaxmt+6C+XEYyeJ/3/ ywyoxo0HQJ8KWzzKEZQefCjh1xA6ZAM2S9BJy2JHn70Huz2f3UpDzZ11olPVfFt8hO ni7dA/IV0fB2E4lHQx0voSIRFDKADsTVJEld+b/HqrHxomixp35vz+9LeI9MmGJqno CH1ke9fSeZu+I98AnGwjjlBjBBZ1+tkQLhhdRPsLkyJSqJ7XUSlegYPocARLrFP0ky TVXNnUSDZFe0m0Px3i2lGteZ9HXXkx6CEgb0bXsmLS3lM6r+XeJmCGocCfnrTbkmvy WQ7lEbKMnNNnw== From: Arnd Bergmann To: linux-arch@vger.kernel.org Cc: Arnd Bergmann , "James E.J. Bottomley" , Al Viro , Anton Ivanov , Brian Cain , Chris Zankel , Christian Borntraeger , Christoph Hellwig , Guo Ren , Heiko Carstens , Helge Deller , Jeff Dike , Linus Walleij , Max Filippov , Michal Simek , Richard Weinberger , Thomas Bogendoerfer , Vasily Gorbik , Vineet Gupta , Yoshinori Sato , linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, linux-s390@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-um@lists.infradead.org, linux-xtensa@linux-xtensa.org, uclinux-h8-devel@lists.sourceforge.jp Subject: [PATCH v3 4/9] arc: use generic strncpy/strnlen from_user Date: Thu, 22 Jul 2021 14:48:09 +0200 Message-Id: <20210722124814.778059-5-arnd@kernel.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210722124814.778059-1-arnd@kernel.org> References: <20210722124814.778059-1-arnd@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Arnd Bergmann Remove the arc implemenation of strncpy/strnlen and instead use the generic versions. The arc 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. 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 d8f51eb8963b..64e5f9366401 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 -- 2.29.2