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 467B8C4332F for ; Wed, 13 Dec 2023 15:02:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BD6456B0459; Wed, 13 Dec 2023 10:02:36 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B5EBC6B04DB; Wed, 13 Dec 2023 10:02:36 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 98A2A6B04DD; Wed, 13 Dec 2023 10:02:36 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 80D496B0459 for ; Wed, 13 Dec 2023 10:02:36 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 38EF1140C08 for ; Wed, 13 Dec 2023 15:02:36 +0000 (UTC) X-FDA: 81562111512.28.EED1F4A Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by imf17.hostedemail.com (Postfix) with ESMTP id CFAD04000B for ; Wed, 13 Dec 2023 15:02:03 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=aE87hCYr; spf=pass (imf17.hostedemail.com: domain of iii@linux.ibm.com designates 148.163.156.1 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=1702479724; a=rsa-sha256; cv=none; b=nzS7y7/uKi5ZoGOfWsd6uzgcA6w8CtdfioUpT3cq5eYknxAZDNqcTaN1/5SwTkZmXgUwuV RQav1qV9Iox1RXWlmHakxz/fRGNnj7GRLr/hoHVq1LHfuooTaHRlkNI4+LUd6+8qRVOBpy 1USf40UlFXT85560wup6X8l41ARMEL0= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=aE87hCYr; spf=pass (imf17.hostedemail.com: domain of iii@linux.ibm.com designates 148.163.156.1 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=1702479724; 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=WUqGMWDQsotOfJsdMdUdUke3R0PN1jxvlT3CqFRehkM=; b=Ap+4laaEXNcdAYht6mJRj5LjAn7y9dDLGmY/ozWdsLjCy4CZjWIEjsRP3Q9xzpsoi+Ds5V JKbgm1wAly9EOnrBpISPqsQXCsOyL9Y8AO2+b77/M5/CieTvrehZDWCcDcRMWIIqxUljyN iyJv9mxjuhL4PHax+Xr05kNdBidewv8= Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3BDELKdC022454; Wed, 13 Dec 2023 15:01:54 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=message-id : subject : from : to : cc : date : in-reply-to : references : content-type : content-transfer-encoding : mime-version; s=pp1; bh=WUqGMWDQsotOfJsdMdUdUke3R0PN1jxvlT3CqFRehkM=; b=aE87hCYrJqeR/Q9CJPvk1HYBdKFIbpG8+DF3cjUDleBAh7vd4YQaJ6LyDe5FAtppjp/S XulsAGB5Gr4VWL/dZppypjurebXGNQdQhjY3QCNBUEpdpFJuEmtE0/nxs6ulLX8+MV0v PZZDOr33ax2ZKQqeBzPWzdOZor58of9R5m7bAPyIyBKcYgeIGukLWj07L5602WkMJrTu uEuyhN00ffUJHwPT/ZOxBykoPZcpceZ97TKmqDShgx0BPzf4QHlxvnm9JtyrnDhaaTYx EpsXozQynRZaHSUbCOywQcdr/spouf02RT/gfAAB1jngjXY3hBswgI9RvTY2/Yw/MFB3 RQ== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3uyd9qb1rw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 13 Dec 2023 15:01:52 +0000 Received: from m0353729.ppops.net (m0353729.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 3BDELZV8024068; Wed, 13 Dec 2023 15:01:51 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 3uyd9qb1qr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 13 Dec 2023 15:01:51 +0000 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 3BDEGiPt008450; Wed, 13 Dec 2023 15:01:50 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 3uw2jtht35-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 13 Dec 2023 15:01:50 +0000 Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 3BDF1lpD24052302 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 13 Dec 2023 15:01:47 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 08F3B2004E; Wed, 13 Dec 2023 15:01:47 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A027920043; Wed, 13 Dec 2023 15:01:45 +0000 (GMT) Received: from [9.171.70.156] (unknown [9.171.70.156]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Wed, 13 Dec 2023 15:01:45 +0000 (GMT) Message-ID: <0bd0f6f9d0c6ff454739f38d6661fdda662afcca.camel@linux.ibm.com> Subject: Re: [PATCH v2 12/33] kmsan: Allow disabling KMSAN checks for the current task From: Ilya Leoshkevich To: Alexander Potapenko Cc: Alexander Gordeev , Andrew Morton , Christoph Lameter , David Rientjes , Heiko Carstens , Joonsoo Kim , Marco Elver , Masami Hiramatsu , Pekka Enberg , Steven Rostedt , Vasily Gorbik , Vlastimil Babka , 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 Date: Wed, 13 Dec 2023 16:01:45 +0100 In-Reply-To: References: <20231121220155.1217090-1-iii@linux.ibm.com> <20231121220155.1217090-13-iii@linux.ibm.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.48.4 (3.48.4-1.fc38) MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: ahpnbjqfUrHjRu_h2faEroNfAjnwxAiU X-Proofpoint-ORIG-GUID: DbOOs6ZkGakRHkgEME2dN21fy0MBcb1e 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_08,2023-12-13_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 impostorscore=0 malwarescore=0 clxscore=1015 phishscore=0 adultscore=0 spamscore=0 mlxlogscore=553 priorityscore=1501 bulkscore=0 lowpriorityscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311290000 definitions=main-2312130106 X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: CFAD04000B X-Stat-Signature: 6oc437fd7ohgetfpt7ax95c7r97fxb6j X-Rspam-User: X-HE-Tag: 1702479723-33897 X-HE-Meta: U2FsdGVkX1+uZS7CmB2GPoe1cT9Ra5U8CdqSezdKOYPEdVQ22mfoCYTTWpaFDl5eCxADuwFjkzARAvWJTlGYHAmO0t2NW9UwVYgtzoPAvCgiTaWLTSYT56YnXiRPW3qoz2fTnLR0CWekfdChqvAN4frmvo3ay98oSr5nTaOsaIGJQ8d23w1YeMvfocHyJxSplLjiGvgjk79/wOQxkq0f75j8X8xYsfd9WN67x16mJHYTbc/9N1bMo0lEdLwsI/Sg07F00Ure6EDm9cG0I3bhA7bDj5tEiOnbXtI4J01sB7VM3bOZFZyT7JePy7Gk4xKX2PRNucNkBwKnTPsXruj/zHmImvAP8CfWmzjB2VKudpr0zchSYyVrU0bWEGKs8Tdz8nX7vemjCKOPdaph0eK17C5FFYtX1cRkIt5gvLhezL0eFdf6kSBDCL2b2OEIjI+yubjG56mHH2THis31/TI51Hf+mTXziFu5snmkYoUl3tqiB0cT040xW9ziX8MxwTGlxWS1hn794f+RAPiRVR/H2wKDs89dhCINIldL07Wn4LA6a6pNwcIbn/k5hYc6+kp1bl8zWviUkJZUjy1hMqOT9FNtB9rS8lxKSlU90wKTReXTi6IByJN03JYVgNuZBWeEPnjKnqWTn61YvCl89k0Yq8RF0rzl/aFiAMC8avM0S1kTW6ms1zY82G/tnb1zZPggZKOk1qHqFKet0NODaXcfJ4bMc8H4f0lJKAIsGl/sel6seiAcZLrKneilM3pOwWNvN2iQJJOYeEytyWBWMx9yKM3W3JcPbmmx5Pp8G0mSWKD1s+X4QC1Da7YcSDDfVjtbwBA5/rvGHgobM9Fa6mc0AHOMzfTUgEKFnb+0ByKH+hDblITPUbgwK2GiNCV8O/1ZSG9wVGnfV1bRf2/5BnCUpHeSSyg4g5/x5NenzfdEv5eVuJOiu3aaipopwGHLBewTYH7mCWf13BnOV5OSHh5 SvGHTePB Cf5zKI8bNzxCAFs11V+BzKtxk/W+u8je3yvteH5Fu7Bfq5SVuDPKJLqgBoUip6s4OAGf/WO5/x9UCsztH2kZnadx6xVzC4ujreDoR37BZZ/qKa2yTT8q7V1bqx/KFM02INPRt2OEztohjpWptL0GdieWKFs6u+SyjmhoCBQlL0Qk2jZXPZY6HwsB9e9r02J4mtm/70bJD07sVzUBkpRThB9VZdedpovItnkDr3wap4dD5/VRUkEmeSO3LfbRs3oDRPrKIO+wkoI63qgGt/zUmYVaKhoo+gsEDN6rw9YmoQ2rtVbqpTaLZbIodsLW3jlREgKM4 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 Mon, 2023-12-11 at 12:50 +0100, Alexander Potapenko wrote: > On Tue, Nov 21, 2023 at 11:06=E2=80=AFPM Ilya Leoshkevich > wrote: > >=20 > > Like for KASAN, it's useful to temporarily disable KMSAN checks > > around, > > e.g., redzone accesses. Introduce kmsan_disable_current() and > > kmsan_enable_current(), which are similar to their KASAN > > counterparts. >=20 > Initially we used to have this disablement counter in KMSAN, but > adding it uncontrollably can result in KMSAN not functioning > properly. > E.g. forgetting to call kmsan_disable_current() or underflowing the > counter will break reporting. > We'd better put this API in include/linux/kmsan.h to indicate it > should be discouraged. >=20 > > Even though it's not strictly necessary, make them reentrant, in > > order > > to match the KASAN behavior. >=20 > Until this becomes strictly necessary, I think we'd better > KMSAN_WARN_ON if the counter is re-entered. I encountered a case when we are freeing memory from an interrupt handler: [ 149.840553] ------------[ cut here ]------------ =20 [ 149.840649] WARNING: CPU: 1 PID: 181 at mm/kmsan/hooks.c:447 kmsan_disable_current+0x2e/0x40 =20 [ 149.840790] Modules linked in: =20 [ 149.840894] CPU: 1 PID: 181 Comm: (direxec) Tainted: G B W =20 N 6.7.0-rc5-gd34a4b46f382 #13 [ 149.841003] Hardware name: IBM 3931 A01 704 (KVM/Linux) =20 [ 149.841094] Krnl PSW : 0404c00180000000 000000000197dbc2 (kmsan_disable_current+0x32/0x40) [ 149.841276] R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:0 PM:0 RI:0 EA:3 [ 149.841420] Krnl GPRS: 0000000000000040 0000000096914100 0000000000001000 0000000000000001 [ 149.841518] 0000036d827daee0 0000000007c97008 0000000080096500 0000000092f4f000 [ 149.841617] 0000036d00000000 0000000000000000 0000000000000040 0000000000000000 [ 149.841712] 0000000092f4efc0 00000001ff710f60 000000000193acba 0000037f0008f710 [ 149.841893] Krnl Code: 000000000197dbb6: eb0018640352 mviy =20 14436(%r1),0 [ 149.841893] 000000000197dbbc: 07fe bcr =20 15,%r14 [ 149.841893] #000000000197dbbe: af000000 mc =20 0,0 [ 149.841893] >000000000197dbc2: a7f4fffa brc =20 15,000000000197dbb6 [ 149.841893] 000000000197dbc6: 0700 bcr =20 0,%r0 [ 149.841893] 000000000197dbc8: 0700 bcr =20 0,%r0 [ 149.841893] 000000000197dbca: 0700 bcr =20 0,%r0 [ 149.841893] 000000000197dbcc: 0700 bcr =20 0,%r0 [ 149.842438] Call Trace: =20 15:37:25 [90/1838] [ 149.842510] [<000000000197dbc2>] kmsan_disable_current+0x32/0x40=20 [ 149.842631] ([<000000000193ac14>] slab_pad_check+0x1d4/0xac0) [ 149.842738] [<0000000001949222>] free_to_partial_list+0x1d72/0x3b80 [ 149.842850] [<0000000001947066>] __slab_free+0xd86/0x11d0=20 [ 149.842956] [<00000000019111e8>] kmem_cache_free+0x15d8/0x25d0=20 [ 149.843062] [<0000000000229e3a>] __tlb_remove_table+0x20a/0xa50=20 [ 149.843174] [<00000000016c7f98>] tlb_remove_table_rcu+0x98/0x120=20 [ 149.843291] [<000000000083e1c6>] rcu_core+0x15b6/0x54b0=20 [ 149.843406] [<00000000069c3c0e>] __do_softirq+0xa1e/0x2178=20 [ 149.843514] [<00000000003467b4>] irq_exit_rcu+0x2c4/0x630=20 [ 149.843623] [<0000000006949f6e>] do_ext_irq+0x9e/0x120=20 [ 149.843736] [<00000000069c18d4>] ext_int_handler+0xc4/0xf0=20 [ 149.843841] [<000000000197e428>] kmsan_get_metadata+0x68/0x280=20 [ 149.843950] [<000000000197e344>] kmsan_get_shadow_origin_ptr+0x74/0xf0=20 [ 149.844071] [<000000000197ba3a>] __msan_metadata_ptr_for_load_8+0x2a/0x40=20 [ 149.844192] [<0000000000184e4a>] unwind_get_return_address+0xda/0x150=20 [ 149.844313] [<000000000018fd12>] arch_stack_walk+0x172/0x2f0=20 [ 149.844417] [<00000000008f1af0>] stack_trace_save+0x100/0x160=20 [ 149.844529] [<000000000197af22>] kmsan_internal_chain_origin+0x62/0xe0=20 [ 149.844647] [<000000000197c1f0>] __msan_chain_origin+0xd0/0x160=20 [ 149.844763] [<00000000068b3ba4>] memchr_inv+0x5b4/0xb20=20 [ 149.844877] [<000000000193e730>] check_bytes_and_report+0xa0/0xd30=20 [ 149.844986] [<000000000193b920>] check_object+0x420/0x17d0=20 [ 149.845092] [<000000000194aa8a>] free_to_partial_list+0x35da/0x3b80 [ 149.845202] [<0000000001947066>] __slab_free+0xd86/0x11d0=20 [ 149.845308] [<00000000019111e8>] kmem_cache_free+0x15d8/0x25d0=20 [ 149.845414] [<00000000016bc2fe>] exit_mmap+0x87e/0x1200=20 [ 149.845524] [<00000000002f315c>] mmput+0x13c/0x5b0=20 [ 149.845632] [<0000000001b9d634>] exec_mmap+0xc34/0x1230=20 [ 149.845744] [<0000000001b996c2>] begin_new_exec+0xcf2/0x2520=20 [ 149.845857] [<0000000001f6a084>] load_elf_binary+0x2364/0x67d0=20 [ 149.845971] [<0000000001ba5ba4>] bprm_execve+0x25b4/0x4010=20 [ 149.846083] [<0000000001baa7e6>] do_execveat_common+0x2436/0x2600=20 [ 149.846200] [<0000000001ba78f8>] __s390x_sys_execve+0x108/0x140=20 [ 149.846314] [<000000000011b192>] do_syscall+0x4c2/0x690=20 [ 149.846424] [<0000000006949d78>] __do_syscall+0x98/0xe0=20 [ 149.846536] [<00000000069c1640>] system_call+0x70/0xa0=20 [ 149.846638] INFO: lockdep is turned off. [ 149.846846] Last Breaking-Event-Address: [ 149.846916] [<000000000197dbb2>] kmsan_disable_current+0x22/0x40 [ 149.847057] irq event stamp: 0 [ 149.847128] hardirqs last enabled at (0): [<0000000000000000>] 0x0 [ 149.847227] hardirqs last disabled at (0): [<00000000002f8f46>] copy_process+0x21f6/0x8b20 [ 149.847344] softirqs last enabled at (0): [<00000000002f8f80>] copy_process+0x2230/0x8b20 [ 149.847461] softirqs last disabled at (0): [<0000000000000000>] 0x0 [ 149.847559] ---[ end trace 0000000000000000 ]--- [ 149.865485] =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D Using a counter resolves this issue, but, of course, at the expense of not reporting valid issues in the interrupt handler. Unfortunately I don't see another easy way to solve this problem. The possibilities that come to mind are providing uninstrumented memchr_inv() or disablement flags for each context, but I'm not sure if we want to go there, especially since KASAN already has this limitation.