Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp510680pxv; Thu, 22 Jul 2021 05:51:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzmE5CuD+hJpYnoLTI0YPEiXl4SHsxZ5oSOpw+D/6zqOr54IIGURSU3SslvH/qMBE+KAp/c X-Received: by 2002:a50:fd1a:: with SMTP id i26mr53375622eds.372.1626958291082; Thu, 22 Jul 2021 05:51:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626958291; cv=none; d=google.com; s=arc-20160816; b=tjf/vi4RGU2vPGt5y1dMByt3AQuZ2Ogitwg0+ql1hdt//RBn7zdI943SC6I1u99/NQ SWEE/EPeC5J2C7uv8riKVbyc6mZln896ydKrbH+nl/FR51isXOs7/lIk09RAmAE1iSf6 kGvGXZB0L+vUybjVxym2EQCtlHmQY5SnztZBalADMvDuCEILQAuejo85j33leZeTPw4P iAJB+RZOepGqUDFgRGFguCAD+grpq34UOAc+e/nzgKoAWzLqifXDXFzOp/vsuOvijNh9 fPgOSQjp/v31gqOA1cl9aZ9uefbN9axjvgQ6bJggzBvjBv9EIral3arYt+p+4gCU5bcp DCyQ== 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=0GRK5bFNaxmug4wCYkAQGGHeB9g6CesFCQDpM/LvknM=; b=GgdvTMPin8n9CjEjF6U6NLutpaNWK6MxsnDyNDsUUYLisa3vTJlORdA+aQO2AM/qi0 oMOc+nYXzrs1YQD//3LYm2q9CXg7d72VaAJ0ol9L3Mdj1ndtD2tr0nGDlm9OGzK/jHxp Vvn5N5Mnv4BYh20jcqpp+YdZ59OmKhtc372/qkdXPoBXveERp1SefPuWJxk20/Eq+0zu hTCqdzr0s0DwaulrklIuJe8oXMZpfGYHQxfQIcZtHYYfxKmWWTgu3d/5gTtHvdO79Mkq SIpEmr0zcF0Sqc3HDRkpK0Nb+jdaoICon4VO3WsZZemJWZ1vkLLbwZOcOwMoYH34LmvH oCgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=USR3dk0Q; 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 pg25si16065761ejb.554.2021.07.22.05.51.07; Thu, 22 Jul 2021 05:51:31 -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=USR3dk0Q; 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 S231824AbhGVMI6 (ORCPT + 99 others); Thu, 22 Jul 2021 08:08:58 -0400 Received: from mail.kernel.org ([198.145.29.99]:33226 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232029AbhGVMIw (ORCPT ); Thu, 22 Jul 2021 08:08:52 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id E2C5061370; Thu, 22 Jul 2021 12:49:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1626958167; bh=XPhpdi27QaAvcGbuFvwNEkCwvX3l5IQMstM8g6NJxdY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=USR3dk0Q8tG5ik9xAyJYZrNv8LbCR+3r7vdnwRLGKKoOLXR8P4ECDNPHiwwRi2Mov i6qrDRkPYkuPOI8yo7LVTNpZo7Yd3YzOxYsnbsnnsBTPxNP4R6rN7USAoHqIdpuxB7 I1Wqwa7z4JFt4i7Y1hCnoOHN7AWeBrZsc0OXvbH+JbXz1Zhge1X8+P/RVU5lW+Najz MI4I2Vp+8VqC8OWI990QG7sZmflfV5Der3f0kDAU9dzin+MvvApEYr/aXtnZHznBwp P7sLZATtdORXSI/Yswi4H2b8hOpd4seSyPqxAaU+17PNUdIvIYE07dlMPgAsknxhjH kSyR9u43pih9A== 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 6/9] microblaze: use generic strncpy/strnlen from_user Date: Thu, 22 Jul 2021 14:48:11 +0200 Message-Id: <20210722124814.778059-7-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 microblaze implemenation of strncpy/strnlen and instead use the generic versions. The microblaze version is fairly slow because it always does byte accesses even for aligned data, and it lacks a checks for user_addr_max(). Signed-off-by: Arnd Bergmann --- arch/microblaze/Kconfig | 2 + arch/microblaze/include/asm/uaccess.h | 19 +---- arch/microblaze/kernel/microblaze_ksyms.c | 3 - arch/microblaze/lib/uaccess_old.S | 90 ----------------------- 4 files changed, 4 insertions(+), 110 deletions(-) diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig index 14a67a42fcae..10dfa7b4feff 100644 --- a/arch/microblaze/Kconfig +++ b/arch/microblaze/Kconfig @@ -21,6 +21,8 @@ config MICROBLAZE select GENERIC_IRQ_SHOW select GENERIC_PCI_IOMAP select GENERIC_SCHED_CLOCK + select GENERIC_STRNCPY_FROM_USER + select GENERIC_STRNLEN_USER select HAVE_ARCH_HASH select HAVE_ARCH_KGDB select HAVE_ARCH_SECCOMP diff --git a/arch/microblaze/include/asm/uaccess.h b/arch/microblaze/include/asm/uaccess.h index c44b59470e45..bbe39fe00461 100644 --- a/arch/microblaze/include/asm/uaccess.h +++ b/arch/microblaze/include/asm/uaccess.h @@ -296,28 +296,13 @@ raw_copy_to_user(void __user *to, const void *from, unsigned long n) /* * Copy a null terminated string from userspace. */ -extern int __strncpy_user(char *to, const char __user *from, int len); - -static inline long -strncpy_from_user(char *dst, const char __user *src, long count) -{ - if (!access_ok(src, 1)) - return -EFAULT; - return __strncpy_user(dst, src, count); -} +extern long strncpy_from_user(char *dst, const char __user *src, long count); /* * Return the size of a string (including the ending 0) * * Return 0 on exception, a value greater than N if too long */ -extern int __strnlen_user(const char __user *sstr, int len); - -static inline long strnlen_user(const char __user *src, long n) -{ - if (!access_ok(src, 1)) - return 0; - return __strnlen_user(src, n); -} +extern long strnlen_user(const char __user *sstr, int len); #endif /* _ASM_MICROBLAZE_UACCESS_H */ diff --git a/arch/microblaze/kernel/microblaze_ksyms.c b/arch/microblaze/kernel/microblaze_ksyms.c index 303aaf13573b..14e0f2100c41 100644 --- a/arch/microblaze/kernel/microblaze_ksyms.c +++ b/arch/microblaze/kernel/microblaze_ksyms.c @@ -25,9 +25,6 @@ EXPORT_SYMBOL(_mcount); /* * Assembly functions that may be used (directly or indirectly) by modules */ -EXPORT_SYMBOL(__copy_tofrom_user); -EXPORT_SYMBOL(__strncpy_user); - #ifdef CONFIG_OPT_LIB_ASM EXPORT_SYMBOL(memcpy); EXPORT_SYMBOL(memmove); diff --git a/arch/microblaze/lib/uaccess_old.S b/arch/microblaze/lib/uaccess_old.S index eca290090038..dd5f3bfbc2c5 100644 --- a/arch/microblaze/lib/uaccess_old.S +++ b/arch/microblaze/lib/uaccess_old.S @@ -12,96 +12,6 @@ #include #include -/* - * int __strncpy_user(char *to, char *from, int len); - * - * Returns: - * -EFAULT for an exception - * len if we hit the buffer limit - * bytes copied - */ - - .text -.globl __strncpy_user; -.type __strncpy_user, @function -.align 4; -__strncpy_user: - - /* - * r5 - to - * r6 - from - * r7 - len - * r3 - temp count - * r4 - temp val - */ - beqid r7,3f - addik r3,r7,0 /* temp_count = len */ -1: - lbu r4,r6,r0 - beqid r4,2f - sb r4,r5,r0 - - addik r5,r5,1 - addik r6,r6,1 /* delay slot */ - - addik r3,r3,-1 - bnei r3,1b /* break on len */ -2: - rsubk r3,r3,r7 /* temp_count = len - temp_count */ -3: - rtsd r15,8 - nop - .size __strncpy_user, . - __strncpy_user - - .section .fixup, "ax" - .align 2 -4: - brid 3b - addik r3,r0, -EFAULT - - .section __ex_table, "a" - .word 1b,4b - -/* - * int __strnlen_user(char __user *str, int maxlen); - * - * Returns: - * 0 on error - * maxlen + 1 if no NUL byte found within maxlen bytes - * size of the string (including NUL byte) - */ - - .text -.globl __strnlen_user; -.type __strnlen_user, @function -.align 4; -__strnlen_user: - beqid r6,3f - addik r3,r6,0 -1: - lbu r4,r5,r0 - beqid r4,2f /* break on NUL */ - addik r3,r3,-1 /* delay slot */ - - bneid r3,1b - addik r5,r5,1 /* delay slot */ - - addik r3,r3,-1 /* for break on len */ -2: - rsubk r3,r3,r6 -3: - rtsd r15,8 - nop - .size __strnlen_user, . - __strnlen_user - - .section .fixup,"ax" -4: - brid 3b - addk r3,r0,r0 - - .section __ex_table,"a" - .word 1b,4b - /* Loop unrolling for __copy_tofrom_user */ #define COPY(offset) \ 1: lwi r4 , r6, 0x0000 + offset; \ -- 2.29.2