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 EA118C3DA6E for ; Wed, 10 Jan 2024 04:09:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 735616B0096; Tue, 9 Jan 2024 23:09:35 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6E5A96B0098; Tue, 9 Jan 2024 23:09:35 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 585946B0099; Tue, 9 Jan 2024 23:09:35 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 483756B0096 for ; Tue, 9 Jan 2024 23:09:35 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 17F6A80A5C for ; Wed, 10 Jan 2024 04:09:35 +0000 (UTC) X-FDA: 81662072310.09.E6C4A95 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by imf06.hostedemail.com (Postfix) with ESMTP id BD02C180013 for ; Wed, 10 Jan 2024 04:09:32 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=fiEa4OsP; spf=pass (imf06.hostedemail.com: domain of nicholas@linux.ibm.com designates 148.163.156.1 as permitted sender) smtp.mailfrom=nicholas@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=1704859772; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=PN/94FNaJE5gXuuzukilNXUTnIvClfuno9VY3Eps0R8=; b=WAatZXLobQjt43QoUzitVB48Z10va7X18rDF/3ILBr73T4aJf0vwR+6QNtk6rFfjohx9iB fDc75m9oy7XZY1biWoobNXxUbIQPdewbXyb+Ln06eUjtO2Le0DB9lFvKgpkzshhaiU02ik lLJC0DxHEYnx4aMlzrTmUMD2w8WJkbA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1704859772; a=rsa-sha256; cv=none; b=VroMlYlDQeaY1qkBVk90uZvWjiXF1Zw1kA1eS0nY9T2Q4YoqDH/rFFFeznM+eYCpW80W3i z4a8wgL/g8FxKW6dex8bu7SmssAFxzJnhgkOIILzj5SWi8o4/TsVge4ZE61cbE5GOTduVv NFxe66SxYF1hzM3nq6IT5Dufi7zsS+I= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=fiEa4OsP; spf=pass (imf06.hostedemail.com: domain of nicholas@linux.ibm.com designates 148.163.156.1 as permitted sender) smtp.mailfrom=nicholas@linux.ibm.com; dmarc=pass (policy=none) header.from=ibm.com Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 40A1qbdo008950; Wed, 10 Jan 2024 04:09:24 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=pp1; bh=PN/94FNaJE5gXuuzukilNXUTnIvClfuno9VY3Eps0R8=; b=fiEa4OsPs7mzzWN6LJLSNGojGvo1Jd61aFcftfiU+A741rz2mJCMWN5i+R9ZmYn09Lou jjQDU7U7Znd7KAxCH98MDn8BKpxYTm6LgF5RiV0oc4cz/Q4mwhRgJlqOsNDqg772rEEB X7tdTzLGZAvpQDzb7yTw/ihX/R7j/8Zx3eXAKoq2QvCgimc1MmZT79QS9G5Bp+Q1WAJP uA+ygcomKtkhSW5tZ0LUcMK/e5mgjltgU86MsbFTZRb4/LdlAdmGF3HzUNrMNDX1gQ+Z I1T3W2ER0szME8cBpJ35Q7zKJmoaTbFsPpzE6mfVbkdsToVyGIFTCPel3MRBFvRUxM++ Vw== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3vhhxytac6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 10 Jan 2024 04:09:24 +0000 Received: from m0360083.ppops.net (m0360083.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 40A41KHw022734; Wed, 10 Jan 2024 04:09:23 GMT Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3vhhxytabj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 10 Jan 2024 04:09:23 +0000 Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 40A3AoRI000893; Wed, 10 Jan 2024 04:09:22 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 3vfkdkansb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 10 Jan 2024 04:09:22 +0000 Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 40A49KhL24707790 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 10 Jan 2024 04:09:20 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AA8B420043; Wed, 10 Jan 2024 04:09:20 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C835E20040; Wed, 10 Jan 2024 04:09:19 +0000 (GMT) Received: from ozlabs.au.ibm.com (unknown [9.192.253.14]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 10 Jan 2024 04:09:19 +0000 (GMT) Received: from [10.61.2.106] (haven.au.ibm.com [9.192.254.114]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.au.ibm.com (Postfix) with ESMTPSA id 845DE60218; Wed, 10 Jan 2024 15:09:17 +1100 (AEDT) Message-ID: <55c57f88-9975-4510-b6bc-7e78462e0a62@linux.ibm.com> Date: Wed, 10 Jan 2024 15:09:17 +1100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 12/13] powerpc/string: Add KMSAN support Content-Language: en-US To: Christophe Leroy , "glider@google.com" , "elver@google.com" , "dvyukov@google.com" , "akpm@linux-foundation.org" , "mpe@ellerman.id.au" , "npiggin@gmail.com" Cc: "linux-mm@kvack.org" , "kasan-dev@googlegroups.com" , "iii@linux.ibm.com" , "linuxppc-dev@lists.ozlabs.org" , "linux-kernel@vger.kernel.org" References: <20231214055539.9420-1-nicholas@linux.ibm.com> <20231214055539.9420-13-nicholas@linux.ibm.com> <2f35548a-bdbd-4c37-8f60-cebeb381a7af@csgroup.eu> From: Nicholas Miehlbradt In-Reply-To: <2f35548a-bdbd-4c37-8f60-cebeb381a7af@csgroup.eu> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-GUID: Z0gqHeXQBF-DTvYR8mq_KFNHfNuG0Tvm X-Proofpoint-ORIG-GUID: 7207fUxSVPuK1YLYSW2F-TQqKjaebXMm 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=2024-01-09_13,2024-01-09_02,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 phishscore=0 impostorscore=0 lowpriorityscore=0 malwarescore=0 spamscore=0 adultscore=0 bulkscore=0 mlxlogscore=999 mlxscore=0 suspectscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311290000 definitions=main-2401100031 X-Stat-Signature: r7qdcz45kdobsooadq6tgpixwcrzczj9 X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: BD02C180013 X-Rspam-User: X-HE-Tag: 1704859772-226935 X-HE-Meta: U2FsdGVkX1+ZU/qgYnY6CUojpUwMaHYQvENazkHQc5ctwzt9e6hcTd85NJlhaAbyPjeoJyuvUS2fypsomGjEypDbntUFewnBSkd7rLx3irOb6xjk8QvXGh5rsqwLM2eVOPR3F5A5N0/qWtSIOS+slTHoiEKhmvkV+q/LX4nV8ATcScmpZ4OSPycySdH0sPilSVPXomPag6Goiqo2EG0oRLgb2P6vDzOsMvAunNnKZBuAlpbTcTNjIxweaAM40J+yFRu+Bc6TgoiSVcGqaLSx9J1P8J22hPFZWrJKnqlRGztYcXetBfaZ4PSVVE6EYv23R4EUPpzXABsEEYcRIdamx5PpRiSXpeHPrnFGesTgCrsM7Ie7lJb0+Vits1aFyHtUOViRxoVsnwlISsITpSynHf03G9hr5W1uHZqknSgSTF9gLQIcCCAG3zds99d7wrzgZrI1uCfapzk9qUWWtkYMpoZmyuz2pvK3fN55dyF+wHGu56Ozd8+8fiqbaY88eR2CTCip+2W8XrUYsj9u3Keit3Ypu95G7hlhFTnYVRBabldrkivOzV5Bjhhx4OLwY0jom23T4Lg5nnf7pVTnBHJPDGWfYplokp7g89e9Ixcz7M5rOF2dSArOGfwj3Z0hKa/J9om2rPx1cAPDCWXTGJEVRfFBDIijBzN7I0y9C2nulH1y4CF+XDHrjad+iRRy0RzqQgeYDmwOOMfd3mdWD11kFgD/CLNa76oe74LFGfaZY+U0exdm9KT7qdkwkaS2xehlc66HMEQAVD+9lWwheJJrdyutav8vIKEg/12+i1Lef4FynLr1gnfmCbL0UWydC2HlxtamT/Mwv59FnMPQMBm0g7e0cGU4m/+cYJcbKlzWErYe1OFj6ATu/O5VsGLiiNMhjfzhYQRWdNOqcFvbR5vJux/3GVms4qomWn3u3KD8kTgWD2t67WjecsL0cEp31ITbX0cTea1n0RAB/1tDvPX Ta/hMfT3 wOC3ceXleno1m70dPmdqvvoGpLdDxhMo3kMLQVrSA9bDsHyrJ/8sjGW1faZ2bqOZonOZR9Vjcfr1FiH8= 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: On 14/12/2023 8:25 pm, Christophe Leroy wrote: > > > Le 14/12/2023 à 06:55, Nicholas Miehlbradt a écrit : >> KMSAN expects functions __mem{set,cpy,move} so add aliases pointing to >> the respective functions. >> >> Disable use of architecture specific memset{16,32,64} to ensure that >> metadata is correctly updated and strn{cpy,cmp} and mem{chr,cmp} which >> are implemented in assembly and therefore cannot be instrumented to >> propagate/check metadata. >> >> Alias calls to mem{set,cpy,move} to __msan_mem{set,cpy,move} in >> instrumented code to correctly propagate metadata. >> >> Signed-off-by: Nicholas Miehlbradt >> --- >> arch/powerpc/include/asm/kmsan.h | 7 +++++++ >> arch/powerpc/include/asm/string.h | 18 ++++++++++++++++-- >> arch/powerpc/lib/Makefile | 2 ++ >> arch/powerpc/lib/mem_64.S | 5 ++++- >> arch/powerpc/lib/memcpy_64.S | 2 ++ >> .../selftests/powerpc/copyloops/asm/kmsan.h | 0 >> .../selftests/powerpc/copyloops/linux/export.h | 1 + >> 7 files changed, 32 insertions(+), 3 deletions(-) >> create mode 100644 tools/testing/selftests/powerpc/copyloops/asm/kmsan.h >> >> diff --git a/arch/powerpc/include/asm/kmsan.h b/arch/powerpc/include/asm/kmsan.h >> index bc84f6ff2ee9..fc59dc24e170 100644 >> --- a/arch/powerpc/include/asm/kmsan.h >> +++ b/arch/powerpc/include/asm/kmsan.h >> @@ -7,6 +7,13 @@ >> #ifndef _ASM_POWERPC_KMSAN_H >> #define _ASM_POWERPC_KMSAN_H >> >> +#ifdef CONFIG_KMSAN >> +#define EXPORT_SYMBOL_KMSAN(fn) SYM_FUNC_ALIAS(__##fn, fn) \ >> + EXPORT_SYMBOL(__##fn) >> +#else >> +#define EXPORT_SYMBOL_KMSAN(fn) >> +#endif >> + >> #ifndef __ASSEMBLY__ >> #ifndef MODULE >> >> diff --git a/arch/powerpc/include/asm/string.h b/arch/powerpc/include/asm/string.h >> index 60ba22770f51..412626ce619b 100644 >> --- a/arch/powerpc/include/asm/string.h >> +++ b/arch/powerpc/include/asm/string.h >> @@ -4,7 +4,7 @@ >> >> #ifdef __KERNEL__ >> >> -#ifndef CONFIG_KASAN >> +#if !defined(CONFIG_KASAN) && !defined(CONFIG_KMSAN) >> #define __HAVE_ARCH_STRNCPY >> #define __HAVE_ARCH_STRNCMP >> #define __HAVE_ARCH_MEMCHR >> @@ -56,8 +56,22 @@ void *__memmove(void *to, const void *from, __kernel_size_t n); >> #endif /* CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX */ >> #endif /* CONFIG_KASAN */ >> >> +#ifdef CONFIG_KMSAN >> + >> +void *__memset(void *s, int c, __kernel_size_t count); >> +void *__memcpy(void *to, const void *from, __kernel_size_t n); >> +void *__memmove(void *to, const void *from, __kernel_size_t n); >> + > > The same is done for KASAN, can't you reuse it ? > I tried this but I believe it makes the file more disorganised and difficult to edit since there ends up being a set of definitions for each intersection of features e.g. the definitions needed for both KASAN and KMSAN, just KASAN, just KMSAN, etc. This way it's clearer what each sanitizer needs and changing definitions for one one sanitizer won't require refactors affecting other sanitizers. >> +#ifdef __SANITIZE_MEMORY__ >> +#include >> +#define memset __msan_memset >> +#define memcpy __msan_memcpy >> +#define memmove __msan_memmove >> +#endif > > Will that work as you wish ? > What about the calls to memset() or memcpy() emited directly by GCC ? > These are handled by the compiler instrumentation which replaces these with calls to the instrumented equivalent. >> +#endif /* CONFIG_KMSAN */ >> + >> #ifdef CONFIG_PPC64 >> -#ifndef CONFIG_KASAN >> +#if !defined(CONFIG_KASAN) && !defined(CONFIG_KMSAN) >> #define __HAVE_ARCH_MEMSET32 >> #define __HAVE_ARCH_MEMSET64 >> >> diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile >> index 51ad0397c17a..fc3ea3eebbd6 100644 >> --- a/arch/powerpc/lib/Makefile >> +++ b/arch/powerpc/lib/Makefile >> @@ -32,9 +32,11 @@ obj-y += code-patching.o feature-fixups.o pmem.o >> obj-$(CONFIG_CODE_PATCHING_SELFTEST) += test-code-patching.o >> >> ifndef CONFIG_KASAN >> +ifndef CONFIG_KMSAN >> obj-y += string.o memcmp_$(BITS).o >> obj-$(CONFIG_PPC32) += strlen_32.o >> endif >> +endif >> >> obj-$(CONFIG_PPC32) += div64.o copy_32.o crtsavres.o >> >> diff --git a/arch/powerpc/lib/mem_64.S b/arch/powerpc/lib/mem_64.S >> index 6fd06cd20faa..a55f2fac49b3 100644 >> --- a/arch/powerpc/lib/mem_64.S >> +++ b/arch/powerpc/lib/mem_64.S >> @@ -9,8 +9,9 @@ >> #include >> #include >> #include >> +#include >> >> -#ifndef CONFIG_KASAN >> +#if !defined(CONFIG_KASAN) && !defined(CONFIG_KMSAN) >> _GLOBAL(__memset16) >> rlwimi r4,r4,16,0,15 >> /* fall through */ >> @@ -96,6 +97,7 @@ _GLOBAL_KASAN(memset) >> blr >> EXPORT_SYMBOL(memset) >> EXPORT_SYMBOL_KASAN(memset) >> +EXPORT_SYMBOL_KMSAN(memset) >> >> _GLOBAL_TOC_KASAN(memmove) >> cmplw 0,r3,r4 >> @@ -140,3 +142,4 @@ _GLOBAL(backwards_memcpy) >> b 1b >> EXPORT_SYMBOL(memmove) >> EXPORT_SYMBOL_KASAN(memmove) >> +EXPORT_SYMBOL_KMSAN(memmove) >> diff --git a/arch/powerpc/lib/memcpy_64.S b/arch/powerpc/lib/memcpy_64.S >> index b5a67e20143f..1657861618cc 100644 >> --- a/arch/powerpc/lib/memcpy_64.S >> +++ b/arch/powerpc/lib/memcpy_64.S >> @@ -8,6 +8,7 @@ >> #include >> #include >> #include >> +#include >> >> #ifndef SELFTEST_CASE >> /* For big-endian, 0 == most CPUs, 1 == POWER6, 2 == Cell */ >> @@ -228,3 +229,4 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_LD_STD) >> #endif >> EXPORT_SYMBOL(memcpy) >> EXPORT_SYMBOL_KASAN(memcpy) >> +EXPORT_SYMBOL_KMSAN(memcpy) >> diff --git a/tools/testing/selftests/powerpc/copyloops/asm/kmsan.h b/tools/testing/selftests/powerpc/copyloops/asm/kmsan.h >> new file mode 100644 >> index 000000000000..e69de29bb2d1 >> diff --git a/tools/testing/selftests/powerpc/copyloops/linux/export.h b/tools/testing/selftests/powerpc/copyloops/linux/export.h >> index e6b80d5fbd14..6379624bbf9b 100644 >> --- a/tools/testing/selftests/powerpc/copyloops/linux/export.h >> +++ b/tools/testing/selftests/powerpc/copyloops/linux/export.h >> @@ -2,3 +2,4 @@ >> #define EXPORT_SYMBOL(x) >> #define EXPORT_SYMBOL_GPL(x) >> #define EXPORT_SYMBOL_KASAN(x) >> +#define EXPORT_SYMBOL_KMSAN(x)