From patchwork Thu Jun 13 15:34:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Leoshkevich X-Patchwork-Id: 13697012 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 44246C27C75 for ; Thu, 13 Jun 2024 15:40:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0B50D6B00BB; Thu, 13 Jun 2024 11:40:06 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 061A26B00BC; Thu, 13 Jun 2024 11:40:05 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D8B766B00BF; Thu, 13 Jun 2024 11:40:05 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id AC85E6B00BC for ; Thu, 13 Jun 2024 11:40:05 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 5DA23801BB for ; Thu, 13 Jun 2024 15:40:05 +0000 (UTC) X-FDA: 82226276370.16.7BAA3D6 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by imf07.hostedemail.com (Postfix) with ESMTP id 212564000E for ; Thu, 13 Jun 2024 15:40:02 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b="O8U/ryfl"; dmarc=pass (policy=none) header.from=ibm.com; spf=pass (imf07.hostedemail.com: domain of iii@linux.ibm.com designates 148.163.158.5 as permitted sender) smtp.mailfrom=iii@linux.ibm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1718293201; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=twgTpfHCjImRnKDbwT1fFnn3UXy6li/j6Qe1IMbE5zU=; b=2CsJwMddswmKV/dr4gAO18IEtq/eeDO8CE6mABhPdddUBgUDH17MTHGrfQCZgSAyfRewk8 1UxmOsDk6/e3EtuWklPK+M3O72MDry7nMnN0tpF2uO+IrATkOqH+xW2kduUe1iLrMC34Os qGC2kt5j7p1QVDK7XxeeR/zWh/lzkDg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1718293201; a=rsa-sha256; cv=none; b=6y1C6EEfHkwqbYmRovRnZ4yxLoSNBiFKNb4ZJGDNDSHFYKdcWl2+X0Wvb2cL18ZiwnN68B oJsfqMQvv084NMAeow4M7xUpCBl9Pbq54X6A9LBWU747lN+PdWkkz70sAT4YwILhsuuDu5 dUj2RyGXMaPAb0kUOYnfdQOiyo5cdLU= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b="O8U/ryfl"; dmarc=pass (policy=none) header.from=ibm.com; spf=pass (imf07.hostedemail.com: domain of iii@linux.ibm.com designates 148.163.158.5 as permitted sender) smtp.mailfrom=iii@linux.ibm.com Received: from pps.filterd (m0353722.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 45DFPTbc021282; Thu, 13 Jun 2024 15:39:56 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from :to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=pp1; bh=twgTpfHCjImRn KDbwT1fFnn3UXy6li/j6Qe1IMbE5zU=; b=O8U/ryflh4XWF30+8J0B2o+utq2tv vrs3C+WScs89/2hGzajtpUAI8qjrWtzyaagsm2aScE1t8JELYED9WBnmuFPu7Zh6 Ugv/r/at9a21r/P2cw1loDPMuHEtirmZX2gAlqcoub5qcD2TjMN7J0QilelLvw81 6XrzrLyuhgIqkdJqHlFDkvGJTVoj3857JlseD5MGyPLpBm5yBnszIBkqD3XlJVt/ le4B/2fDhqDn68gqeq8Jt3xRE7RGiNcXzxlm8yxPERKL+mCmaG4DybYcoe84n9TL mevipRa0JFubbHH3GH08lwGI9YzhkARrqsnKOIYZP+lgyxuPDlmj4H/qQ== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3yr1rbgdf0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 13 Jun 2024 15:39:56 +0000 (GMT) Received: from m0353722.ppops.net (m0353722.ppops.net [127.0.0.1]) by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 45DFdtcx014929; Thu, 13 Jun 2024 15:39:55 GMT Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3yr1rbgdew-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 13 Jun 2024 15:39:55 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 45DEZQIF028710; Thu, 13 Jun 2024 15:39:55 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 3yn1mus9g6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 13 Jun 2024 15:39:54 +0000 Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 45DFdn7944433780 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 13 Jun 2024 15:39:51 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 65FBC20065; Thu, 13 Jun 2024 15:39:49 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E78F42004D; Thu, 13 Jun 2024 15:39:48 +0000 (GMT) Received: from black.boeblingen.de.ibm.com (unknown [9.155.200.166]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 13 Jun 2024 15:39:48 +0000 (GMT) From: Ilya Leoshkevich To: Alexander Gordeev , Alexander Potapenko , Andrew Morton , Christoph Lameter , David Rientjes , Heiko Carstens , Joonsoo Kim , Marco Elver , Masami Hiramatsu , Pekka Enberg , Steven Rostedt , Vasily Gorbik , Vlastimil Babka Cc: Christian Borntraeger , Dmitry Vyukov , Hyeonggon Yoo <42.hyeyoo@gmail.com>, kasan-dev@googlegroups.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-s390@vger.kernel.org, linux-trace-kernel@vger.kernel.org, Mark Rutland , Roman Gushchin , Sven Schnelle , Ilya Leoshkevich Subject: [PATCH v4 30/35] s390/string: Add KMSAN support Date: Thu, 13 Jun 2024 17:34:32 +0200 Message-ID: <20240613153924.961511-31-iii@linux.ibm.com> X-Mailer: git-send-email 2.45.1 In-Reply-To: <20240613153924.961511-1-iii@linux.ibm.com> References: <20240613153924.961511-1-iii@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: xAt3sBIWGlvAE8P-bHZ7h7aJJYjlYuY5 X-Proofpoint-GUID: 3bn059eewfkw9Fedtd0GxZ69YNCOvbgM X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.28.16 definitions=2024-06-13_09,2024-06-13_02,2024-05-17_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 mlxscore=0 malwarescore=0 spamscore=0 clxscore=1015 bulkscore=0 suspectscore=0 adultscore=0 priorityscore=1501 lowpriorityscore=0 mlxlogscore=999 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2405170001 definitions=main-2406130112 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 212564000E X-Stat-Signature: ej5drchd8d35kon4mr3zmckj7q7d6un6 X-Rspam-User: X-HE-Tag: 1718293202-486659 X-HE-Meta: U2FsdGVkX1/Ux4m1h8WVhtCu4JXlY5xg7aL0emR1GU69thYyyHyb28w1ixil06izlMIdqvsPWwK6DzCl1kAEkWd38uuneoMLIQw8rH1+bH2hCqXl22+rkdVvARE1NViY6kT/83ZzvYSPzD0Oq7Akl5ZamomaLG/70+GK8cxcY32p4ZrGkpG/mtzEZR/Eh2EJZUAzA23rjJ47klT3IERuYUW4IV+x1E01gf8RyV7l/Hl+nZ+0Zl2v0tZS362slYC2F0IVXAIMnvxEC+6uhvGZnosbmQypp8mtkWXPN20qM93SjCMXTRRuZ86C9oMEM1/cvI++kJQwbn2cY37E4ciHj5D+pXvFsdOugpPzk5NzzcgQIfMjXz7V4jtowavy1DzJmsI2ZEZ/prFNkZoheoex7A49yhFnulBkhA/p9RitVEaWSsWLRSW4yXjiCtIbfjgZH+/Qpp/4XEeV4Zvv8vv4PMURV4RKyQ7edHUngykxUUjjeZudhGpk862dWDQWbR3SXuCKiEql+wHIsqd5iYc3K+EpCZwOvZULBJM45RUnX5giHd3VyADMgi5eG7Sobwd0LowhVe4VhvO+DGyc38o3leaqU8j4C8Dnp6zMf/w7Bnzes2TpFoiVjini0EqmSATCLglzeyttWCJXA8MURN2AnZtoy7ChFpoPcAaY2oVLmNMbLTnoKhMl4cSBOPDaSFD/gAtxNOGqiubCOB6u80k0xCPbB927YPEGerU/aOMoAQSscxpCQHS9l4Xy4tn04tHduFEEy9lelouyoypjnAmd0okNBzXCzEu/XHDp4Pqaxc7WJ5P1SWstR1vTEaay1es3vmKVb/xJbpzEoT4n9DVwZU/fLnGG4KimyP4I71BYJzW6u2xfH1+e85w3NkNns2/13w+059atoiYAjvRr1J5/mvVpUG3KrhX4wD8rPsxGrHZ4qkt6XMKWAzhWpB3/HQQ4UvnalaS3Q0Th0gAgeXo gqFFMb+k YL7264SZcwvgr55I+v8fLxK/mHtRPRj9s24Ymwca3zQ0iACexLP0Yuxh+X1RxWe7qK98j16oQglAQyKxVO3ytjDqxAI1WUca/cTUNb6HUOxW/4uxt9xjWpVgqOcvbQhw7y0KP2msinkuv5f/ZC0U2RhnkiX5lRa3ZAalExjUw+eBtm//o27/o9fdjZZn9Lb0MMVQTkPwkeIalJE7WU8tNmq7B+36hu1dyWowGTWpzLiqAFL3xmpdsPI39ZmekTDuflG1gh0kyl7iI39eJYB4fw9St1etiTqLj3kkH+HNSNsyeWyBo0y4ZJQi6DH+Bg6ysVQ2CeIEk8PxL3Z1ocr60AKNKlR/wmSZbdfh4JEV1nTzoOvc= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Add KMSAN support for the s390 implementations of the string functions. Do this similar to how it's already done for KASAN, except that the optimized memset{16,32,64}() functions need to be disabled: it's important for KMSAN to know that they initialized something. The way boot code is built with regard to string functions is problematic, since most files think it's configured with sanitizers, but boot/string.c doesn't. This creates various problems with the memset64() definitions, depending on whether the code is built with sanitizers or fortify. This should probably be streamlined, but in the meantime resolve the issues by introducing the IN_BOOT_STRING_C macro, similar to the existing IN_ARCH_STRING_C macro. Reviewed-by: Alexander Potapenko Acked-by: Heiko Carstens Signed-off-by: Ilya Leoshkevich --- arch/s390/boot/string.c | 16 ++++++++++++++++ arch/s390/include/asm/string.h | 20 +++++++++++++++----- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/arch/s390/boot/string.c b/arch/s390/boot/string.c index faccb33b462c..f6b9b1df48a8 100644 --- a/arch/s390/boot/string.c +++ b/arch/s390/boot/string.c @@ -1,11 +1,18 @@ // SPDX-License-Identifier: GPL-2.0 +#define IN_BOOT_STRING_C 1 #include #include #include #undef CONFIG_KASAN #undef CONFIG_KASAN_GENERIC +#undef CONFIG_KMSAN #include "../lib/string.c" +/* + * Duplicate some functions from the common lib/string.c + * instead of fully including it. + */ + int strncmp(const char *cs, const char *ct, size_t count) { unsigned char c1, c2; @@ -22,6 +29,15 @@ int strncmp(const char *cs, const char *ct, size_t count) return 0; } +void *memset64(uint64_t *s, uint64_t v, size_t count) +{ + uint64_t *xs = s; + + while (count--) + *xs++ = v; + return s; +} + char *skip_spaces(const char *str) { while (isspace(*str)) diff --git a/arch/s390/include/asm/string.h b/arch/s390/include/asm/string.h index 351685de53d2..2ab868cbae6c 100644 --- a/arch/s390/include/asm/string.h +++ b/arch/s390/include/asm/string.h @@ -15,15 +15,12 @@ #define __HAVE_ARCH_MEMCPY /* gcc builtin & arch function */ #define __HAVE_ARCH_MEMMOVE /* gcc builtin & arch function */ #define __HAVE_ARCH_MEMSET /* gcc builtin & arch function */ -#define __HAVE_ARCH_MEMSET16 /* arch function */ -#define __HAVE_ARCH_MEMSET32 /* arch function */ -#define __HAVE_ARCH_MEMSET64 /* arch function */ void *memcpy(void *dest, const void *src, size_t n); void *memset(void *s, int c, size_t n); void *memmove(void *dest, const void *src, size_t n); -#ifndef CONFIG_KASAN +#if !defined(CONFIG_KASAN) && !defined(CONFIG_KMSAN) #define __HAVE_ARCH_MEMCHR /* inline & arch function */ #define __HAVE_ARCH_MEMCMP /* arch function */ #define __HAVE_ARCH_MEMSCAN /* inline & arch function */ @@ -36,6 +33,9 @@ void *memmove(void *dest, const void *src, size_t n); #define __HAVE_ARCH_STRNCPY /* arch function */ #define __HAVE_ARCH_STRNLEN /* inline & arch function */ #define __HAVE_ARCH_STRSTR /* arch function */ +#define __HAVE_ARCH_MEMSET16 /* arch function */ +#define __HAVE_ARCH_MEMSET32 /* arch function */ +#define __HAVE_ARCH_MEMSET64 /* arch function */ /* Prototypes for non-inlined arch strings functions. */ int memcmp(const void *s1, const void *s2, size_t n); @@ -44,7 +44,7 @@ size_t strlcat(char *dest, const char *src, size_t n); char *strncat(char *dest, const char *src, size_t n); char *strncpy(char *dest, const char *src, size_t n); char *strstr(const char *s1, const char *s2); -#endif /* !CONFIG_KASAN */ +#endif /* !defined(CONFIG_KASAN) && !defined(CONFIG_KMSAN) */ #undef __HAVE_ARCH_STRCHR #undef __HAVE_ARCH_STRNCHR @@ -74,20 +74,30 @@ void *__memset16(uint16_t *s, uint16_t v, size_t count); void *__memset32(uint32_t *s, uint32_t v, size_t count); void *__memset64(uint64_t *s, uint64_t v, size_t count); +#ifdef __HAVE_ARCH_MEMSET16 static inline void *memset16(uint16_t *s, uint16_t v, size_t count) { return __memset16(s, v, count * sizeof(v)); } +#endif +#ifdef __HAVE_ARCH_MEMSET32 static inline void *memset32(uint32_t *s, uint32_t v, size_t count) { return __memset32(s, v, count * sizeof(v)); } +#endif +#ifdef __HAVE_ARCH_MEMSET64 +#ifdef IN_BOOT_STRING_C +void *memset64(uint64_t *s, uint64_t v, size_t count); +#else static inline void *memset64(uint64_t *s, uint64_t v, size_t count) { return __memset64(s, v, count * sizeof(v)); } +#endif +#endif #if !defined(IN_ARCH_STRING_C) && (!defined(CONFIG_FORTIFY_SOURCE) || defined(__NO_FORTIFY))