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 95978C4332F for ; Wed, 13 Dec 2023 23:37:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 497986B059F; Wed, 13 Dec 2023 18:37:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 3B8118D0079; Wed, 13 Dec 2023 18:37:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 123796B05A0; Wed, 13 Dec 2023 18:37:07 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id D5AC08D007A for ; Wed, 13 Dec 2023 18:37:07 -0500 (EST) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id B4B8D1402FC for ; Wed, 13 Dec 2023 23:37:07 +0000 (UTC) X-FDA: 81563408094.17.6D33B98 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by imf08.hostedemail.com (Postfix) with ESMTP id 84BCD160019 for ; Wed, 13 Dec 2023 23:37:05 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=r3caq7Ta; spf=pass (imf08.hostedemail.com: domain of iii@linux.ibm.com designates 148.163.158.5 as permitted sender) smtp.mailfrom=iii@linux.ibm.com; dmarc=pass (policy=none) header.from=ibm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1702510625; 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=uehXTWhTAti2RbWOf4Uy4ADfWEwLA/3Qguip2P6sfCk=; b=MgnxRg0weju5tEy8cOROLF3+fcheQK2e34A3JEiuvC1NWksXWGQCDS4EF/z88shDNBcE89 01pyT2IU6ed6tBO5po+go76icvRNRaX/FoRCRjRlikX4ZlaUin8jFlux3ozDub34xJ9xcE R9aVALaNLObaUdAi3zavowQ6VfkMsSQ= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=r3caq7Ta; spf=pass (imf08.hostedemail.com: domain of iii@linux.ibm.com designates 148.163.158.5 as permitted sender) smtp.mailfrom=iii@linux.ibm.com; dmarc=pass (policy=none) header.from=ibm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1702510625; a=rsa-sha256; cv=none; b=XjLwwSL3ZmMmPFdUDJ30ClrveEZQjbmCS1PLbpmam/czcohPwRI2dgGU+3f1bsKi/6EJ3g MT11fsLWOxnwCfiVNOT6Wf0njVPtGcUhUId5JGsCS7GaRbzmHXgb3WMONjHraYm+nslKX6 0Bzt47BkPPDTK4k3WaYYcDsppNkaHU0= Received: from pps.filterd (m0353724.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3BDMNSlB009777; Wed, 13 Dec 2023 23:36:59 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=uehXTWhTAti2RbWOf4Uy4ADfWEwLA/3Qguip2P6sfCk=; b=r3caq7TaYfR95IcSIA36XsE65tfTjnnCg2WX1iH3rBrSLS+Fm4GbxWRlYB05BkzoeOn6 xdB0KPEMnTe5caSSxLG33OY+3S/1DII9ltkuM5e2o7dVosyMOb/ndGdbbopl1qOcGua1 V2A2A8Lo7JeZ4kMW8jF/lBcTlcdC1JOFfNcwD0Bs+fJkqNvL0efmzBZ+HFEfw/UUA4YH adyclu+FuZlbq9wPrcE/Kff+jByFhv3RPOcgqHokUW6k1YuZXwj5r+F285sF1+Gle6UH 4Y6EYtCdbSCX5PyCEY7RFFGbjqI/4hws0Owi0wnpnL6JHjMMfna/ADpIiJeMcj/Pj9Jw aA== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3uynbt1d43-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 13 Dec 2023 23:36:59 +0000 Received: from m0353724.ppops.net (m0353724.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 3BDNPLv0015845; Wed, 13 Dec 2023 23:36:58 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 3uynbt1d3u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 13 Dec 2023 23:36:58 +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 3BDNOPrV014136; Wed, 13 Dec 2023 23:36:57 GMT Received: from smtprelay01.fra02v.mail.ibm.com ([9.218.2.227]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 3uw592c4kb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 13 Dec 2023 23:36:57 +0000 Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay01.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 3BDNasWZ19399296 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 13 Dec 2023 23:36:55 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C829120040; Wed, 13 Dec 2023 23:36:54 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 616EE20043; Wed, 13 Dec 2023 23:36:53 +0000 (GMT) Received: from heavy.boeblingen.de.ibm.com (unknown [9.171.70.156]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 13 Dec 2023 23:36:53 +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 v3 29/34] s390/string: Add KMSAN support Date: Thu, 14 Dec 2023 00:24:49 +0100 Message-ID: <20231213233605.661251-30-iii@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231213233605.661251-1-iii@linux.ibm.com> References: <20231213233605.661251-1-iii@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-GUID: avSp4lR9n432laRfm456yBo3_eY87VR9 X-Proofpoint-ORIG-GUID: yTkAPanVBluqwaQP7gkJ1tZqPgPXBCFg X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.997,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-12-13_14,2023-12-13_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 adultscore=0 clxscore=1015 bulkscore=0 mlxscore=0 spamscore=0 suspectscore=0 impostorscore=0 mlxlogscore=999 phishscore=0 lowpriorityscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311290000 definitions=main-2312130167 X-Rspamd-Queue-Id: 84BCD160019 X-Rspam-User: X-Stat-Signature: okz6fegx4guc5rd6szcr9hap6ghn4fay X-Rspamd-Server: rspam01 X-HE-Tag: 1702510625-489100 X-HE-Meta: U2FsdGVkX19AJWwBMGIhKwW3OOEXASONUCvdShZnvXWM8X9kL8QPz3mwCnhD2ewLuhHZjBPOnbM3eJ95vixMnlglqJ3PJ7n5IG49/s/wz3f9MbPvn0HZqMA4nP811KABRkVd8FyL61xd4K3nPM+gleDHwZGNJCYR/KbbtDG/O+XkwHqusj31139G6nDf9qc3pX3bCHJccd30eFw5iitxuuMZdMSL2KvBY2r3AE7mmHti8kON2+ISR313YNGUid+5LEj07PajUex5L1q3PVfDWEUsYjyIMSEV2np4BuCzt3xMSQ10lmsR7HH/8X2IBl4v4YN7IuN0NpPf9X52zGCKXlFxOND4WCBow3qnbSYfPx82HByJdXQSelTzc8QMkkbKaOApyG6fufUe18nKrQbI1NRkAAq/iVwflXOP3SAyVHv2GdIjLuppDg5YSsQ4dMBem9OqPkvhRpEVp28DoopyqoD1i5UId/7CwBPfB5eX0uNKqKdzU5PKZ35QcD/L/rRZYvyG7Mos4824Ok/kRjBBedGvgwTCSoa2iANwTcz3RcyEVhIbJDXPdOkR7LENz8UmFUsHL2fTisuFGwgzmX+D11nwFbAWQ0Ibg04jDjmf+2IQfiIGlsvSoQ1RBkHv6dHItquulrKL2dJIEBmeM3p7ouIrgVn/0bgtNtgQ5ffG/o55cmXqEcGdhp1SCtUvhGoz9We3NUGUMcdszxy1WRzoIV6xfNlEFGpsTeaIJfhs4X4p2bJn6/vCqtEHsg/SNQmIkIFIPp82EfYjQd88/b9p5KC/qb8U2NZZm7pSohsE/z715kAknDvM4NMRnD7HTRVisTEN0CU8X0B5OPIfSHhKaRwW36V9PzpTWcHOOeeoM+8wfokDXl65eG6dqMBPXT9TrmoJjxaxYAGy4TouIIA9wlOzBwX5yvuTByXMWZBIlZ/O1mJYZdqmQEFEQ1k8+lzgMlI7pUkPNXlPih7d1eS iUcLCuLB bvYJCg38bCpYdyuF9FFZgNKlzyaFzA98JImjrya1/ol2hUA3iQxRnTYFg3sD5mgvAIhuhUOSSt7PIV5GB2BeGbuwNFcRviXTJcve4PyU1X3NjJzyBLcceNisLVz444Jwr77QBEaxgxf3elO41YDMShzkEHuyt690qFinYfVZRQy7IO23oicaJJyHtfjg84LzAGQRXnEG3e2g5rb7W3eFXlx7YCCiGOOxbU/KuQTwRWnA1db3g68e2PkHO67JhNxeuZhvfnePOfrb/j1hy2JCKz3b/pXs4JPM6i0mMP7t2veD3g84W2uFSLYsfT80vxXvjm0ayiHiUHjW3uCw= 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 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.43.0