From mboxrd@z Thu Jan 1 00:00:00 1970 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 38BFEC61D9B for ; Tue, 21 Nov 2023 22:03:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AA6156B04F2; Tue, 21 Nov 2023 17:03:11 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A2DA86B04F4; Tue, 21 Nov 2023 17:03:11 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 880126B04F6; Tue, 21 Nov 2023 17:03:11 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 706756B04F2 for ; Tue, 21 Nov 2023 17:03:11 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 513AE160BF2 for ; Tue, 21 Nov 2023 22:03:11 +0000 (UTC) X-FDA: 81483337782.11.36AE20B Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by imf25.hostedemail.com (Postfix) with ESMTP id F1810A001D for ; Tue, 21 Nov 2023 22:03:08 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=L+8cqqrF; dmarc=pass (policy=none) header.from=ibm.com; spf=pass (imf25.hostedemail.com: domain of iii@linux.ibm.com designates 148.163.156.1 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=1700604189; 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=UDKtZIjnMspB2frCJtdqVzxUk5TBX7T6UOIrPkAOLVA=; b=LgTEJCFJjMxOAB6P9lkWW68tOMCQkHa3JqYVhzjeFhaWQXnw4wM9Oy14KP+cDSxsliUAUo Ja4hCMSleW/vdAJPM+X4kj7q+BKP2mNeJEyhFGE12txBo8aq/EntAiJ000+pF+rWCLxt81 xYQUiZqlTOk9Z1t0cZLadBDH9FC0l4Q= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=L+8cqqrF; dmarc=pass (policy=none) header.from=ibm.com; spf=pass (imf25.hostedemail.com: domain of iii@linux.ibm.com designates 148.163.156.1 as permitted sender) smtp.mailfrom=iii@linux.ibm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1700604189; a=rsa-sha256; cv=none; b=P/Qr1Vvw7Pzc035B8zzV4S19YRkCprlLtvZK0tQwZMtLJbQTa5HN5WxfdCTWhJmtsd/8Xx xie7/UOYvRnoUbTniRkXgNVZySkWb1moS1pa+TcaJoiC4i+9Ht43Z3R8U/zJFOYG+c9uW4 /jHiB+iGnSW6H3kP7AduTBVIPABGo7g= Received: from pps.filterd (m0353728.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3ALLlnrH021914; Tue, 21 Nov 2023 22:03:02 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=UDKtZIjnMspB2frCJtdqVzxUk5TBX7T6UOIrPkAOLVA=; b=L+8cqqrFrWyNFJgy42VcZsyEbvsOIlJujCPQkjIBX+a6Tc1wqiPo4i3ZTpily1OJ1M8g oMlAmkAP05nioYARgfWwFnuBT1MFSLm7tmfMzFSv//qdHSqqODy+E6xzRzDHo8Abql43 LQUjS/NE5mLyv77k9ygMYsQXlZzjqLTfkzri2wAVfexvdfHStIbjeIzbNleyw2wpK9Xx tCIViI+Y5+hjXQgT+5pAHjv8nWY6z6MqkvCghcBWljWnVR3tQGBo0C1reS70I16kfRgZ r+A+rf1RjoB8XUadZp3aT+3PVk5FfVJRZdQ3KabU0goVL0x8e8TxHHDxgF19NTUl9RdX 4g== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3uh4s68c5r-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 21 Nov 2023 22:03:01 +0000 Received: from m0353728.ppops.net (m0353728.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 3ALLm62H022921; Tue, 21 Nov 2023 22:03:01 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3uh4s68c4t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 21 Nov 2023 22:03:01 +0000 Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 3ALLnblt007094; Tue, 21 Nov 2023 22:03:00 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 3ufaa236m1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 21 Nov 2023 22:03:00 +0000 Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 3ALM2vY062914868 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 21 Nov 2023 22:02:57 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 0573920067; Tue, 21 Nov 2023 22:02:57 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 90AFD20063; Tue, 21 Nov 2023 22:02:55 +0000 (GMT) Received: from heavy.boeblingen.de.ibm.com (unknown [9.179.23.98]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 21 Nov 2023 22:02:55 +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 v2 28/33] s390/string: Add KMSAN support Date: Tue, 21 Nov 2023 23:01:22 +0100 Message-ID: <20231121220155.1217090-29-iii@linux.ibm.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231121220155.1217090-1-iii@linux.ibm.com> References: <20231121220155.1217090-1-iii@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: 7M62AdOtlqzhieNaI_BHgPGcFZ8gsSni X-Proofpoint-GUID: coPIcXW9nwH1Nbuhp_dwGo5aF4-eO1Lm X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-21_12,2023-11-21_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 priorityscore=1501 spamscore=0 impostorscore=0 mlxlogscore=999 bulkscore=0 mlxscore=0 malwarescore=0 adultscore=0 phishscore=0 lowpriorityscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311210172 X-Rspamd-Queue-Id: F1810A001D X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: e4hwr94w6g5ns9mq5bnff9nr3cp8tbgr X-HE-Tag: 1700604188-89143 X-HE-Meta: U2FsdGVkX1+gtEx+kak/FIcPvT9iBWQDbTo3o4qtsDD2VsS8teYwfqf3AiSElpr0Q7tIAr5qIa/kMM9pQhRLlF9Frii+NSqOuseUuTml5LLT57Mlu1Q8dZc5PFvIvnx1u96XtOE+cdjcOlkq1ZxCV3KJTvmfaj0VSEIJkV8Ph4oeD8eAkW0aVCHecxC8Ud/lAXwZfe2nT27db0kCgqHFcDxey8vwmKXyB/quVIQ5MhbeMOqEdNLM9spvj6l5ewdBoMtZFYCAhs49jK8kYla9yaaopdC4mabbg/g0ijOLCH26KrVKmzIXjxRDz5K1FeJgwIkGyo1Ee45fr1lmbzC66j9V8YQFq1jvU5ZwGXEdFLPc4oy8F9NPbsRtCUhzWGmtGUAYkmisillKFkWE2b83QtsiMJfva4su68EwfTt2wbjEhr9NXz6tkMZOCnHlK/FjWBqfU5h0pDTTP0UEZ/Unq2hI8yuz7+U6+m4m2FWlIzf2rKWI+mXtES9onlJS6xS4gPzr4ZjkL98qPCUsuHTlL8YUqRBaN0xVsp5IEkujoZ/89u0JkGXLXdXWNIC1jpyCYWb84fj7i5wx0vBhhdVAyGhvdLVT0KIZlHI4+UyPXNF8yhuhdrtyzxlQp48n5ZqjIpXrC1J26Tk1qbOLhxVbRm4E/t8b1STbMM2H5jZ4VGXIadcyDcAJ1ilaSjZ4wJ6XLU+TZf8xAj2NVXzXP8RV8Pv5grbygVN1TBFqUHejwhpnabd/ue6MnYjMqes1QDUhOHhgVtV0Dan2Sidwal6sxLVVp+ltyPy8SxJVoMS/fOr4MW0kJviB77oMWxIJ+Kit/syuUUCZIdDusXGAKmdcUqDSbxcIORjMhaUbXgHFOgI+mqs6mvSZvnvYMnD6YMIvyv/mMdAYQt/eiLxs0IvxIW0lqqBTIVZMWWYRCY/45dPv6dp+xSKYnVY5E5NKPVvFm3eivK16cl8ZR5i+/IJ bkYCwpQt +BxQDce5XoWEHN59K5BvcSxSqtyOveE4qpkvhMjnjkb0WfZDqVEWPXxIGLCdcBywSh13VHqFuumxnGLuKFFSRhv5NeQspeBFJomG3GDLMv031nQWOt7XfGkdh0B1luYPmJlhqxuoXwUmoCqs9ew2Kl5SdLNZnFG5ImeVyQ5rM9VTIQkX1gZOggtQjje5pjofX3HcuIUUnCDuQRh/OoYr7D0wyGToNsjGx9DH4j3J2tu6vCJy9ZMAVENGvehLaJGEYS7szCw970xVmfimrDzzN9yAF7+TanCIxAFNfdr4rroBEVkbbLzHBO/xeSQ== 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. 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)) -- 2.41.0