From patchwork Thu Jan 12 19:43:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Zijlstra X-Patchwork-Id: 13098840 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 F160EC54EBE for ; Thu, 12 Jan 2023 19:58:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 18ACF80020; Thu, 12 Jan 2023 14:57:47 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 077D08001D; Thu, 12 Jan 2023 14:57:46 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D720A80020; Thu, 12 Jan 2023 14:57:46 -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 C20DB8001D for ; Thu, 12 Jan 2023 14:57:46 -0500 (EST) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 8E935140E12 for ; Thu, 12 Jan 2023 19:57:46 +0000 (UTC) X-FDA: 80347207332.15.E48051E Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) by imf28.hostedemail.com (Postfix) with ESMTP id 869F2C0010 for ; Thu, 12 Jan 2023 19:57:43 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b=UZP1WhwW; spf=none (imf28.hostedemail.com: domain of peterz@infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=peterz@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1673553465; 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:in-reply-to: references:references:dkim-signature; bh=GvwbGFmvCEUlvMDtuRKKain2RkezywAYf/go7N4onKI=; b=wl2RyX35LMGiruCGofB5YGP7czfMW0S5p9T2erOLQa34AvIYo4HtxcUoCtrtqbn/6qzHGI 3EG+44DlLhEeMmw9vtc1RRfs9i2iNZ6cQI8o6kwKdsUauLqHObGEm/SXHb8jLGVV6Wisfl qISjFKNxhn++w7OJUQnI+2+S0W82iQI= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=infradead.org header.s=desiato.20200630 header.b=UZP1WhwW; spf=none (imf28.hostedemail.com: domain of peterz@infradead.org has no SPF policy when checking 90.155.92.199) smtp.mailfrom=peterz@infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1673553465; a=rsa-sha256; cv=none; b=t6t+IUqXotlzwazpJjn/pJG5MFnpZYyvX+WYd8t88+kxtysmeA6e5Ka7Z7fh2OXfZgJwL+ WObRfkp2utAQZPvFCvNjq1lmeNY8lYGSLTqV1sv3/TPKX/bFUb3PC6JWUCJlvWm0YVQzTP TLOBIRMgsc6t0Pc3/icKaL2lfrVNStg= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Type:MIME-Version:References: Subject:Cc:To:From:Date:Message-ID:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:In-Reply-To; bh=GvwbGFmvCEUlvMDtuRKKain2RkezywAYf/go7N4onKI=; b=UZP1WhwWXNKsSNjUZl7FaNdKCn ddEQs2bPXQi5qPjj7qlJxw/QPW/0nxOgZLN8xBPDMZ/1zjz4Cj4cBDEZBuYnBOjn9uMSnfZ/x7+2I 9dTh9PKCvuDC56aeAA3cL71DKDuGL799xQcS7MxhLz5jtlqRv3ljsfno7QvEUZeBL/ZKqQpiu6eX8 1n/CZuVsNYoC/48UeqqLacX54nCFrLom4QSa5qKlMYqjjQVNzfHjWkBbeNM7/Bwfq6S/ww+f2nN0u 0BjGg5qo+ibAucyPfwz5pwvtUQ9FofzqrnD212u/gvXOr0euOanteiang6T+NsdgqQ3BiJZ1d+Ozd /GvjuQPw==; Received: from j130084.upc-j.chello.nl ([24.132.130.84] helo=noisy.programming.kicks-ass.net) by desiato.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1pG3hW-0045tg-0P; Thu, 12 Jan 2023 19:57:31 +0000 Received: from hirez.programming.kicks-ass.net (hirez.programming.kicks-ass.net [192.168.1.225]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (Client did not present a certificate) by noisy.programming.kicks-ass.net (Postfix) with ESMTPS id 20794303471; Thu, 12 Jan 2023 20:57:14 +0100 (CET) Received: by hirez.programming.kicks-ass.net (Postfix, from userid 0) id 5F8C02CD066D4; Thu, 12 Jan 2023 20:57:08 +0100 (CET) Message-ID: <20230112195542.028523143@infradead.org> User-Agent: quilt/0.66 Date: Thu, 12 Jan 2023 20:43:58 +0100 From: Peter Zijlstra To: peterz@infradead.org Cc: richard.henderson@linaro.org, ink@jurassic.park.msu.ru, mattst88@gmail.com, vgupta@kernel.org, linux@armlinux.org.uk, nsekhar@ti.com, brgl@bgdev.pl, ulli.kroll@googlemail.com, linus.walleij@linaro.org, shawnguo@kernel.org, Sascha Hauer , kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com, tony@atomide.com, khilman@kernel.org, krzysztof.kozlowski@linaro.org, alim.akhtar@samsung.com, catalin.marinas@arm.com, will@kernel.org, guoren@kernel.org, bcain@quicinc.com, chenhuacai@kernel.org, kernel@xen0n.name, geert@linux-m68k.org, sammy@sammy.net, monstr@monstr.eu, tsbogend@alpha.franken.de, dinguyen@kernel.org, jonas@southpole.se, stefan.kristiansson@saunalahti.fi, shorne@gmail.com, James.Bottomley@HansenPartnership.com, deller@gmx.de, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com, borntraeger@linux.ibm.com, svens@linux.ibm.com, ysato@users.sourceforge.jp, dalias@libc.org, davem@davemloft.net, richard@nod.at, anton.ivanov@cambridgegreys.com, johannes@sipsolutions.net, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, acme@kernel.org, mark.rutland@arm.com, alexander.shishkin@linux.intel.com, jolsa@kernel.org, namhyung@kernel.org, jgross@suse.com, srivatsa@csail.mit.edu, amakhalov@vmware.com, pv-drivers@vmware.com, boris.ostrovsky@oracle.com, chris@zankel.net, jcmvbkbc@gmail.com, rafael@kernel.org, lenb@kernel.org, pavel@ucw.cz, gregkh@linuxfoundation.org, mturquette@baylibre.com, sboyd@kernel.org, daniel.lezcano@linaro.org, lpieralisi@kernel.org, sudeep.holla@arm.com, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, anup@brainfault.org, thierry.reding@gmail.com, jonathanh@nvidia.com, jacob.jun.pan@linux.intel.com, atishp@atishpatra.org, Arnd Bergmann , yury.norov@gmail.com, andriy.shevchenko@linux.intel.com, linux@rasmusvillemoes.dk, dennis@kernel.org, tj@kernel.org, cl@linux.com, rostedt@goodmis.org, mhiramat@kernel.org, frederic@kernel.org, paulmck@kernel.org, pmladek@suse.com, senozhatsky@chromium.org, john.ogness@linutronix.de, juri.lelli@redhat.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, bsegall@google.com, mgorman@suse.de, bristot@redhat.com, vschneid@redhat.com, ryabinin.a.a@gmail.com, glider@google.com, andreyknvl@gmail.com, dvyukov@google.com, vincenzo.frascino@arm.com, Andrew Morton , jpoimboe@kernel.org, linux-alpha@vger.kernel.org, linux-kernel@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-omap@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-ia64@vger.kernel.org, loongarch@lists.linux.dev, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, openrisc@lists.librecores.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-um@lists.infradead.org, linux-perf-users@vger.kernel.org, virtualization@lists.linux-foundation.org, linux-xtensa@linux-xtensa.org, linux-acpi@vger.kernel.org, linux-pm@vger.kernel.org, linux-clk@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org, kasan-dev@googlegroups.com, "Rafael J. Wysocki" , Ulf Hansson Subject: [PATCH v3 44/51] entry,kasan,x86: Disallow overriding mem*() functions References: <20230112194314.845371875@infradead.org> MIME-Version: 1.0 X-Stat-Signature: esnittezrec6hpibpazz75i151ptqhp4 X-Rspam-User: X-Rspamd-Queue-Id: 869F2C0010 X-Rspamd-Server: rspam06 X-HE-Tag: 1673553463-284725 X-HE-Meta: U2FsdGVkX18X7wrNDaeyiVn6oDJdfudN/rJ38q4iVLg6L48WpG9QyBslphXH1Nq8RIe2oabzcey1r9A7NWhsx5bCHRMH0E2C3VquwEp8UT5wt+BqExe7tEaTIwGTQJXOF6U1Zp9/ug3L3uOrxPmzhR6kQyvqX65XfZMP3zGQvm4E4oEYMlA22Mf6SBw9NgdcazC8cGwRUfb5Rq3mZT+2ZvPgKFbtTejL3HF9TROTl1pNQKEgJzDWq+CszgYNFJYz4wtNERbkuy+mgf/NIIamSPtHXwv4ijzdsJUxtoX0AYSOSNpyrBS+M7vGTU6RO21M06CJGJtGPpMnZly3tB65FzwQgj9Em8AP/AcAr6nKHeOfO6mQCjHQo/TxP9U/T1w62rRu426N4FNgY2SaUu7Wuc6cIbbwLTY8TVnBXpyRX5/CuD+dKe4ZK/gluewtJut3gHDSdA/uAYOZy+nN8U5zBaBqKjgq+JE3pCfz89hZxtv/ZEHK1FPB9x1EiXYbdNULjb5HvMZVVNH4PpzPewz4Z0jlXy+qOMc1w6Pu55QDfg6JVWL7EDG+kZl4ZvHTTuNd/omUKsk5mP0P8rdby1eQ2hxy6DKb4hRNfyeB1+HvArfxp5touFLr327oUw3g6gamPBL8STe5sHQ50gccKKVxIqG5P6p2srcxDB11xK6Rj1UdiWuLSKc2ASCKldS31nWBi/6tF9f5WRgC41ZQ5EtlD3wC7PePL33xYoZi5QijXouNR72Xnmo5HrzNH/iM+kdBCJIkn2ht2Kbwd8/Fadh1KuzlQGLD/zAgYFLBohZjt+XNj+2TVxEslkih1rJ7M/cD1U3kPKjAl2KMrRxoHcQjJWqraquqgPiR/g+SzK2rLL8o4TUihWGyO3Jf90ixepNPLF2WNrxCVkTg+/0j5+m9G/L/3MYEioJXWlJdQHtSBUiewpOzL+KOS+plMF3nx9O4DH8OGs2huv39cFapXD6 Nh5YSs61 1Esw+d8skYm+QWXP6arsdhYaVhGsfiSDNKJ0sukSpvDhaL2ta2f/pnnWdfNJqzP/XA4yBQmmBBdm6Ny1+GAyqbhKdJDv5w17/qjwfV6kSNBBaTsQIyaPhVBN9hySdC8JQpVz1OH3oy+wZSXKemJW6ANAXrXNd5D9irKP3VQBqIXSHVe6V5ueVjSAjrvLSh4PeMxhR89MSLd7GSQ9BEwU2WHG7oPGHg1t6M+jJa/hWTBV5s2B6kwLSQAv/JETIVKNfFrql1Va9I/FBeOzNNCvgGY9aP8X0+6SrnmLKRDSZN7oQ74fCYcFUoeK9uTJugJurOXI1YET9p/evZV2Deb0Teo874ccJaHeqa+cayyOgXD35exeW4VWvdm0qaPmbVsN9JALItHJxf8HIzPoQfwqArQDvFHztNLdjmmYwvJUOf66Gu2bbYM+pL09L3f9jDnR52CkZY5R7FmWWWWRzFKA/k8VNjZavX7bZDzcV3XkMsWH2S+C4rqPJfGYqu8sTAfVDuty+XfVPJsSjinmXIok/FNj7DR+4Nx4LMkfNss9IsvV74lnrhvObjsLPNvUXfLHf4ccK4FGnwXlDExnQK/1osACU33xiV+L/G/7cEXbqZYznkbDhxr8R/zAERk60pM0IvdFXCmhn+geoJ6svhNinlQw/yWDFLUW4oHn71Y0NyPAd7bbKjUt6Ou0IApEMpM1xdKJC4Nhv+i1xn5nNNpAWBB4OQoN3Rs5jRhULoQs6bvLaSNaFd1jUN8NLASqH6G7etdN9jjDWP5ItqpJxZo8fR/vMpQAXQq36F02zp7a1PcyzQhgKQdWXzrDyKHNYEs1JISAodtX8w2eNyCKtbuZZ6kNQSQP37AESEexnCTSt7xGqAUDYJIAb2UK5NI86fVhHc6c20X95PytvVMeNsqEOb7In4NQxv+Wd2+Tkgy/yQpPWWRMIyninL67s34Aa5Ne3GuGFdiP5+s2DzRaGaDS5jJa1WG5E 79AYTs0A WaJT8BbNmdK5+aM8SV5/KQi1P9OElvJmQ5Qs6n+KXNwDl+AF2Oxg1+UpXMAFKhVpDEPMSOhqZrHSAmaEQ6xRN5Dx9uTYKJkQBcpv5zTm4J5QmqRxOYVWPhe5GmPb2gkh+f8HKUB9emMNHLdbztCLAQXVsFqvchzZdboRYp3oafrLQ3HQbIzB2GZegX44m+iRI55RtfdXQopaO+BHfJ6NAzwpyEL/SLxXvNzjXvqmuc1qmSTs7xYyihHBd+J8lT3/2bxlGWq/9lHI20VCqdZP3Rry6q32VRuJM6L/ANDvokJZy4RqpUzWET4PPQPIZ5aNydQQdAqkWNnJFTf5//JfWj4tm+j34gR7+/o5yNk9RfI7Z+rdTe8rc2beNHFOLR+jHZB7JNJUqmCv7BFQNDSeiKzGFxtaFuwuqlqC677FWh7hiYtNnMR0FCpSlMt0hWwBb2OsKUwsdce7S+iWDgTBcg5vF10ofsO3YxfEWMxLHF5FWEiURITzQl4LGodXtrurSdZEpopvF+vgUXfMjC9CGbgLO0nYTUL6PL7pGvVMAx6/c1lBRYjyaI3Q+WcKB5Nfj39kHWdjzkCuWs/+/eYE3MpFEyOGPrTbBtC1jmJ10T13hHU5J4bbsTm2pEqSXl9zEcYyNWioJ/DyDCKny5zK9z8w68I4Xl/RauLutXu1+Pzrxt7Khh2xsovZVunr9WgwrWUDKtlO/GMxjJmTkd0fhDLc//rkykspKSbCh98WBFYy0QhnJ+5bya37HeNT5AhXdZUSv2hay9z4gTMZyUBylZ/jjf1s7ivmRwhya6+56sWUZtoyQn/rKCS7o/vnnqw3kgxECndj8iVIz2A78lFV1Td7fvQy461E2OW5Ei1G92rxESz2uS9bzaV7/xAXCCnBk1JydMGPfNNqVyVBiRbLBmDbFUeVQoxcpLkZFC7axhBuTb2GzpL3WZUo4wmGfLNQdasVqOv3++sD3JBwtzNgSIgL2xdcz Wfvu/9z8 5qrhj+TcGfCC+NyzIZgVcbMfeJQyLgvRmRecHWCiqL/fJTOZKhNXzK0K6jqbtrm84H8v9ng+X3Tq1hPLN0Vlbn7wUr2Jv6dHWHm1HLTjw2H/gpKevp0Hley+TbC/OFTneClpqSzS2Afu32K1/26PVpxCX0e3hKom7Rbueit7yhmWX8lkTsunMox8L7uiTO6nSZgrdEoDzIAasvwswcBXOlWR9qKWeR3umosl3s3B5DPBefRyRPNzv8C7bSJc3mioEgBvtDOMrshJ15/s3rOq5iaSnz7NtgDDju36tFP/LEwfHwrsUJvlzB7A0kIjSXxJ/pC9kkCexmfENmDTfNdf29YJOAHAhfCuc4q+f5O1jtYJdDR7W6PO8Tv35CiG6W6nPNqVQHxDaJ6UePvPtCADP/TfRUJV7OBph60yuA/qXK3Idv+l6B3CcpoD3H3pjWayjM0g1tYjceB5kKWDaUdkFT3ZYEN1EE/qNrz8lmDAnhH2y5tGzFvgXN4Ste0JsoXneWt/AXpUBWOteYwruZ6O2ff1KHTkW+bXaT/mHiF7hS7e2dFQFX/h9rKYpd1wdzyd5/OuUjD0o040rOI7mgMkqzYYnfqKnLO0wTce2k1mlvuhfKcll5JT3M/Yq2BrrPn/SRQEQwv9d7DW54iB33l0+vWe8JBLP1Y0rb9dUf+A4SeU/7VBSjvnrpD05f5qK/q1DfAVhdTNp7gDhKgsaC1e8E0cHFqbE9UNMhYRw1ogT3yPkHlDp2zgXnvVSUDy0zuNSdjY+fWY0AVeXvkkG9lSCQjs15uwXSoDCJjBL3x+w3Stpp4V/ouEqYNJje8v+SH9X0UpnK2mKHu296OFGXRcfm56RhJeonsGQIIFvfRFmZRqsGr3V2wXa9/kZirm6sflBLRSO2xHwqNYiRhV8VzSrxOVzwZ0VfbjyNhqv6FJ/rhSLEM96dzNG2IQpnuUiIc2js36GKAUFsRIAQvqTaTel+dKEGqIx Js7PbapK w4mF9FoX66jPNZBQimAYz1JFO0OWAiVJ7RzmT1FUjXYcwlfdP0nIokVYMrGotuByeqy4egJY1Q5B2Xvk8ha9Q8PxiON41d6SpJFkvnKR8+DA== 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: KASAN cannot just hijack the mem*() functions, it needs to emit __asan_mem*() variants if it wants instrumentation (other sanitizers already do this). vmlinux.o: warning: objtool: sync_regs+0x24: call to memcpy() leaves .noinstr.text section vmlinux.o: warning: objtool: vc_switch_off_ist+0xbe: call to memcpy() leaves .noinstr.text section vmlinux.o: warning: objtool: fixup_bad_iret+0x36: call to memset() leaves .noinstr.text section vmlinux.o: warning: objtool: __sev_get_ghcb+0xa0: call to memcpy() leaves .noinstr.text section vmlinux.o: warning: objtool: __sev_put_ghcb+0x35: call to memcpy() leaves .noinstr.text section Remove the weak aliases to ensure nobody hijacks these functions and add them to the noinstr section. Signed-off-by: Peter Zijlstra (Intel) Acked-by: Rafael J. Wysocki Acked-by: Frederic Weisbecker Tested-by: Tony Lindgren Tested-by: Ulf Hansson --- arch/x86/lib/memcpy_64.S | 5 ++--- arch/x86/lib/memmove_64.S | 4 +++- arch/x86/lib/memset_64.S | 4 +++- mm/kasan/kasan.h | 4 ++++ mm/kasan/shadow.c | 38 ++++++++++++++++++++++++++++++++++++++ tools/objtool/check.c | 3 +++ 6 files changed, 53 insertions(+), 5 deletions(-) --- a/arch/x86/lib/memcpy_64.S +++ b/arch/x86/lib/memcpy_64.S @@ -7,7 +7,7 @@ #include #include -.pushsection .noinstr.text, "ax" +.section .noinstr.text, "ax" /* * We build a jump to memcpy_orig by default which gets NOPped out on @@ -42,7 +42,7 @@ SYM_FUNC_START(__memcpy) SYM_FUNC_END(__memcpy) EXPORT_SYMBOL(__memcpy) -SYM_FUNC_ALIAS_WEAK(memcpy, __memcpy) +SYM_FUNC_ALIAS(memcpy, __memcpy) EXPORT_SYMBOL(memcpy) /* @@ -183,4 +183,3 @@ SYM_FUNC_START_LOCAL(memcpy_orig) RET SYM_FUNC_END(memcpy_orig) -.popsection --- a/arch/x86/lib/memmove_64.S +++ b/arch/x86/lib/memmove_64.S @@ -13,6 +13,8 @@ #undef memmove +.section .noinstr.text, "ax" + /* * Implement memmove(). This can handle overlap between src and dst. * @@ -213,5 +215,5 @@ SYM_FUNC_START(__memmove) SYM_FUNC_END(__memmove) EXPORT_SYMBOL(__memmove) -SYM_FUNC_ALIAS_WEAK(memmove, __memmove) +SYM_FUNC_ALIAS(memmove, __memmove) EXPORT_SYMBOL(memmove) --- a/arch/x86/lib/memset_64.S +++ b/arch/x86/lib/memset_64.S @@ -6,6 +6,8 @@ #include #include +.section .noinstr.text, "ax" + /* * ISO C memset - set a memory block to a byte value. This function uses fast * string to get better performance than the original function. The code is @@ -43,7 +45,7 @@ SYM_FUNC_START(__memset) SYM_FUNC_END(__memset) EXPORT_SYMBOL(__memset) -SYM_FUNC_ALIAS_WEAK(memset, __memset) +SYM_FUNC_ALIAS(memset, __memset) EXPORT_SYMBOL(memset) /* --- a/mm/kasan/kasan.h +++ b/mm/kasan/kasan.h @@ -551,6 +551,10 @@ void __asan_set_shadow_f3(const void *ad void __asan_set_shadow_f5(const void *addr, size_t size); void __asan_set_shadow_f8(const void *addr, size_t size); +void *__asan_memset(void *addr, int c, size_t len); +void *__asan_memmove(void *dest, const void *src, size_t len); +void *__asan_memcpy(void *dest, const void *src, size_t len); + void __hwasan_load1_noabort(unsigned long addr); void __hwasan_store1_noabort(unsigned long addr); void __hwasan_load2_noabort(unsigned long addr); --- a/mm/kasan/shadow.c +++ b/mm/kasan/shadow.c @@ -38,6 +38,12 @@ bool __kasan_check_write(const volatile } EXPORT_SYMBOL(__kasan_check_write); +#ifndef CONFIG_GENERIC_ENTRY +/* + * CONFIG_GENERIC_ENTRY relies on compiler emitted mem*() calls to not be + * instrumented. KASAN enabled toolchains should emit __asan_mem*() functions + * for the sites they want to instrument. + */ #undef memset void *memset(void *addr, int c, size_t len) { @@ -68,6 +74,38 @@ void *memcpy(void *dest, const void *src return __memcpy(dest, src, len); } +#endif + +void *__asan_memset(void *addr, int c, size_t len) +{ + if (!kasan_check_range((unsigned long)addr, len, true, _RET_IP_)) + return NULL; + + return __memset(addr, c, len); +} +EXPORT_SYMBOL(__asan_memset); + +#ifdef __HAVE_ARCH_MEMMOVE +void *__asan_memmove(void *dest, const void *src, size_t len) +{ + if (!kasan_check_range((unsigned long)src, len, false, _RET_IP_) || + !kasan_check_range((unsigned long)dest, len, true, _RET_IP_)) + return NULL; + + return __memmove(dest, src, len); +} +EXPORT_SYMBOL(__asan_memmove); +#endif + +void *__asan_memcpy(void *dest, const void *src, size_t len) +{ + if (!kasan_check_range((unsigned long)src, len, false, _RET_IP_) || + !kasan_check_range((unsigned long)dest, len, true, _RET_IP_)) + return NULL; + + return __memcpy(dest, src, len); +} +EXPORT_SYMBOL(__asan_memcpy); void kasan_poison(const void *addr, size_t size, u8 value, bool init) { --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -956,6 +956,9 @@ static const char *uaccess_safe_builtin[ "__asan_store16_noabort", "__kasan_check_read", "__kasan_check_write", + "__asan_memset", + "__asan_memmove", + "__asan_memcpy", /* KASAN in-line */ "__asan_report_load_n_noabort", "__asan_report_load1_noabort",