Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp3120373rwd; Sat, 10 Jun 2023 01:42:41 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6o94p3C6uZDJnZuJEuLHPPrZDREhdj8ycZQ7JZnnY+hRBe6Sy72kJo1sFGDfKa8WwblpBg X-Received: by 2002:a17:90a:6fe4:b0:258:9174:20a8 with SMTP id e91-20020a17090a6fe400b00258917420a8mr2774599pjk.35.1686386560938; Sat, 10 Jun 2023 01:42:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686386560; cv=none; d=google.com; s=arc-20160816; b=Rlsnkugm3iRvIpEHIe2VI0mO52xeM3gQjUNTSBkli7V//wTQ9ShXufxYUFGNJ6diMo ArZQp/D2UWQFmxR4XkNTqVQ8/7RbeDP35i/OYSecKN/54xN1ukXQNjaXFkCiesmd8+nb 91vdh67TYudrIqiBed9YCb+nc4V9Sec2KV7bi199u6nD7ogEaFfIn+o8tNjqhlZI0Sap ClufMena2ucABVr/Z8vBscHy0PmdBZCl4Sdx92pysmD/BSJZPuIldPoMwpBzqBfI091e BKjKP6ri8tPVy1r9yiQRKbyW0/uBPnzb1yBEwjugdAEHapjMJY6xmzo45kaUdNs4Xqsf J1jA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=03R7eHgwxzatTlB9+r8Wly6PxQrbkq+SEg7qjW1Keso=; b=hv5T0Z8qHVmVUYlElNYQuL3smbihq3/atLOcqTjdf6mPAe5uvvN0s/PeeAmd6lrf3h 4Xhcl/oOOe9/IOTuzKH+YtKJIwENd/B37iXHKQ8kYgBIWBz7pYtQSNxIqHzHsa4eXRL8 vrs8wcNGZoMK0fiAQggeBw9yplt8XmEHp+hZIFBtafVmEAHMf3jB9hsIvcSa9ZZZWotL 2xKJuGCcROcvYGL+3W0iwKTna6Zl4t7NPQpU6JxUImv0bPxU9wVfKqT88Ak+NUaBlkTt wAR8+EmdnbWZFEGxxznI1LMezeXJsFWuUDaajjRcWnVoBMPO/J6LxEoKrfcGJhuY+6c7 pEww== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=4zMcHzyP; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l4-20020a170903244400b001b00ffb44c5si4191650pls.229.2023.06.10.01.42.27; Sat, 10 Jun 2023 01:42:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=4zMcHzyP; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231184AbjFJIfO (ORCPT + 99 others); Sat, 10 Jun 2023 04:35:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53436 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229867AbjFJIeu (ORCPT ); Sat, 10 Jun 2023 04:34:50 -0400 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ACA0630ED for ; Sat, 10 Jun 2023 01:34:48 -0700 (PDT) Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-3f7e4953107so16615e9.1 for ; Sat, 10 Jun 2023 01:34:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1686386087; x=1688978087; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=03R7eHgwxzatTlB9+r8Wly6PxQrbkq+SEg7qjW1Keso=; b=4zMcHzyPcBoQlYn5SC0/EiVRIz3abKw+zlLWFPU3vCptX9ZFvp5joEJ8g6qt0qmXYi 6XvIwDB4ibTq8Hy3iZ/awCXVXQ6+fAk+ciSZjSxGLT9bWnhcqknvShE7n8iSlYFn1LHv sC8sVhRWFmIPFDjQJuS2Nrncefmfytz+LHxGoOG5ZQXzMzcfUxavfxGjb20L7bsXpuFC Y/OOk8EF5Z591+RHWC9ufglaEaZDsNhf5yZLH/9okv9r/qyD9pMwAC1pqB4Ll1Lcldpj fQRj7ntwCWdhaam16AD+2crSNtAnLmRSlAiqINqMXDm5XvCXf58F19gP/B/uan172zA9 aGJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686386087; x=1688978087; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=03R7eHgwxzatTlB9+r8Wly6PxQrbkq+SEg7qjW1Keso=; b=fOi80ilkDmBDhxvEDOC3IqXxst3xkga3zM2VDp6qJII6SLXNdBgpkpTLqxeU7WaxRg jSeYP3qw86/PgOXC9dF6xAWyZVoomkmuibmNHTKPtUjZkRw/IGd4cy33GfnaId5J1Xiz qEh0v7CBWV68IuYUZAHc84KOkeVvSvP+1Mr0tJinwC3hSXnRGdvjwUHu21EKrKgbqsLi BxV3djpS9rqXSRfdeo7I5LUAaw3YLHYHi1u1hAyjDvlz38nqkYdlR53mv7GyCnxASVmh HUGnNQMAsVQPsWXcvHpT71toJMbEFoIEbrvXyIYV4fcR83uXjRef1qT3cfUyFKxw8nUV ZYfA== X-Gm-Message-State: AC+VfDwHwjDjuUgy5yqgeioNlGT5/OJkwZyQxmYiLepmnrnvOtSMIiVN VAcJ7sC/o1oIUElBxa14lqB1e3T0OAX6+WRp3CaAFw== X-Received: by 2002:a05:600c:82c9:b0:3f7:ba55:d03b with SMTP id eo9-20020a05600c82c900b003f7ba55d03bmr75932wmb.2.1686386087134; Sat, 10 Jun 2023 01:34:47 -0700 (PDT) MIME-Version: 1.0 References: <20230609-uml-kasan-v1-1-5fac8d409d4f@axis.com> In-Reply-To: <20230609-uml-kasan-v1-1-5fac8d409d4f@axis.com> From: David Gow Date: Sat, 10 Jun 2023 16:34:35 +0800 Message-ID: Subject: Re: [PATCH] x86: Fix build of UML with KASAN To: Vincent Whitchurch Cc: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Frederic Weisbecker , "Rafael J. Wysocki" , Peter Zijlstra , Richard Weinberger , Anton Ivanov , Johannes Berg , linux-um@lists.infradead.org, Andrey Ryabinin , Alexander Potapenko , Andrey Konovalov , Dmitry Vyukov , Vincenzo Frascino , kasan-dev@googlegroups.com, linux-kernel@vger.kernel.org, kernel@axis.com Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="000000000000b2c6fd05fdc25b12" X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED,USER_IN_DEF_DKIM_WL, USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --000000000000b2c6fd05fdc25b12 Content-Type: text/plain; charset="UTF-8" On Fri, 9 Jun 2023 at 19:19, Vincent Whitchurch wrote: > > Building UML with KASAN fails since commit 69d4c0d32186 ("entry, kasan, > x86: Disallow overriding mem*() functions") with the following errors: > > $ tools/testing/kunit/kunit.py run --kconfig_add CONFIG_KASAN=y > ... > ld: mm/kasan/shadow.o: in function `memset': > shadow.c:(.text+0x40): multiple definition of `memset'; > arch/x86/lib/memset_64.o:(.noinstr.text+0x0): first defined here > ld: mm/kasan/shadow.o: in function `memmove': > shadow.c:(.text+0x90): multiple definition of `memmove'; > arch/x86/lib/memmove_64.o:(.noinstr.text+0x0): first defined here > ld: mm/kasan/shadow.o: in function `memcpy': > shadow.c:(.text+0x110): multiple definition of `memcpy'; > arch/x86/lib/memcpy_64.o:(.noinstr.text+0x0): first defined here > > If I'm reading that commit right, the !GENERIC_ENTRY case is still > supposed to be allowed to override the mem*() functions, so use weak > aliases in that case. > > Fixes: 69d4c0d32186 ("entry, kasan, x86: Disallow overriding mem*() functions") > Signed-off-by: Vincent Whitchurch > --- Thanks: I stumbled into this the other day and ran out of time to debug it. I've tested that it works here. Tested-by: David Gow Cheers, -- David > arch/x86/lib/memcpy_64.S | 4 ++++ > arch/x86/lib/memmove_64.S | 4 ++++ > arch/x86/lib/memset_64.S | 4 ++++ > 3 files changed, 12 insertions(+) > > diff --git a/arch/x86/lib/memcpy_64.S b/arch/x86/lib/memcpy_64.S > index 8f95fb267caa7..5dc265b36ef0b 100644 > --- a/arch/x86/lib/memcpy_64.S > +++ b/arch/x86/lib/memcpy_64.S > @@ -40,7 +40,11 @@ SYM_TYPED_FUNC_START(__memcpy) > SYM_FUNC_END(__memcpy) > EXPORT_SYMBOL(__memcpy) > > +#ifdef CONFIG_GENERIC_ENTRY > SYM_FUNC_ALIAS(memcpy, __memcpy) > +#else > +SYM_FUNC_ALIAS_WEAK(memcpy, __memcpy) > +#endif > EXPORT_SYMBOL(memcpy) > > SYM_FUNC_START_LOCAL(memcpy_orig) > diff --git a/arch/x86/lib/memmove_64.S b/arch/x86/lib/memmove_64.S > index 02661861e5dd9..3b1a02357fb29 100644 > --- a/arch/x86/lib/memmove_64.S > +++ b/arch/x86/lib/memmove_64.S > @@ -215,5 +215,9 @@ SYM_FUNC_START(__memmove) > SYM_FUNC_END(__memmove) > EXPORT_SYMBOL(__memmove) > > +#ifdef CONFIG_GENERIC_ENTRY > SYM_FUNC_ALIAS(memmove, __memmove) > +#else > +SYM_FUNC_ALIAS_WEAK(memmove, __memmove) > +#endif > EXPORT_SYMBOL(memmove) > diff --git a/arch/x86/lib/memset_64.S b/arch/x86/lib/memset_64.S > index 7c59a704c4584..fe27538a355db 100644 > --- a/arch/x86/lib/memset_64.S > +++ b/arch/x86/lib/memset_64.S > @@ -40,7 +40,11 @@ SYM_FUNC_START(__memset) > SYM_FUNC_END(__memset) > EXPORT_SYMBOL(__memset) > > +#ifdef CONFIG_GENERIC_ENTRY > SYM_FUNC_ALIAS(memset, __memset) > +#else > +SYM_FUNC_ALIAS_WEAK(memset, __memset) > +#endif > EXPORT_SYMBOL(memset) > > SYM_FUNC_START_LOCAL(memset_orig) > > --- > base-commit: 9561de3a55bed6bdd44a12820ba81ec416e705a7 > change-id: 20230609-uml-kasan-2392dd4c3858 > > Best regards, > -- > Vincent Whitchurch > > -- > You received this message because you are subscribed to the Google Groups "kasan-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an email to kasan-dev+unsubscribe@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/msgid/kasan-dev/20230609-uml-kasan-v1-1-5fac8d409d4f%40axis.com. --000000000000b2c6fd05fdc25b12 Content-Type: application/pkcs7-signature; name="smime.p7s" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="smime.p7s" Content-Description: S/MIME Cryptographic Signature MIIPnwYJKoZIhvcNAQcCoIIPkDCCD4wCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGg ggz5MIIEtjCCA56gAwIBAgIQeAMYYHb81ngUVR0WyMTzqzANBgkqhkiG9w0BAQsFADBMMSAwHgYD VQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UE AxMKR2xvYmFsU2lnbjAeFw0yMDA3MjgwMDAwMDBaFw0yOTAzMTgwMDAwMDBaMFQxCzAJBgNVBAYT AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSowKAYDVQQDEyFHbG9iYWxTaWduIEF0bGFz IFIzIFNNSU1FIENBIDIwMjAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvLe9xPU9W dpiHLAvX7kFnaFZPuJLey7LYaMO8P/xSngB9IN73mVc7YiLov12Fekdtn5kL8PjmDBEvTYmWsuQS 6VBo3vdlqqXZ0M9eMkjcKqijrmDRleudEoPDzTumwQ18VB/3I+vbN039HIaRQ5x+NHGiPHVfk6Rx c6KAbYceyeqqfuJEcq23vhTdium/Bf5hHqYUhuJwnBQ+dAUcFndUKMJrth6lHeoifkbw2bv81zxJ I9cvIy516+oUekqiSFGfzAqByv41OrgLV4fLGCDH3yRh1tj7EtV3l2TngqtrDLUs5R+sWIItPa/4 AJXB1Q3nGNl2tNjVpcSn0uJ7aFPbAgMBAAGjggGKMIIBhjAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0l BBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHzM CmjXouseLHIb0c1dlW+N+/JjMB8GA1UdIwQYMBaAFI/wS3+oLkUkrk1Q+mOai97i3Ru8MHsGCCsG AQUFBwEBBG8wbTAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AyLmdsb2JhbHNpZ24uY29tL3Jvb3Ry MzA7BggrBgEFBQcwAoYvaHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLmNvbS9jYWNlcnQvcm9vdC1y My5jcnQwNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9yb290LXIz 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 9IGQSBx2i4m+hGXJpET+MEwGA1UdIARFMEMwQQYJKwYBBAGgMgEoMDQwMgYIKwYBBQUHAgEWJmh0 dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMAwGA1UdEwEB/wQCMAAwgZoGCCsG AQUFBwEBBIGNMIGKMD4GCCsGAQUFBzABhjJodHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9jYS9n c2F0bGFzcjNzbWltZWNhMjAyMDBIBggrBgEFBQcwAoY8aHR0cDovL3NlY3VyZS5nbG9iYWxzaWdu LmNvbS9jYWNlcnQvZ3NhdGxhc3Izc21pbWVjYTIwMjAuY3J0MB8GA1UdIwQYMBaAFHzMCmjXouse LHIb0c1dlW+N+/JjMEYGA1UdHwQ/MD0wO6A5oDeGNWh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20v Y2EvZ3NhdGxhc3Izc21pbWVjYTIwMjAuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQCRI3Z4cAidgFcv Usqdz765x6KMZSfg/WtFrYg8ewsP2NpCxVM2+EhPyyEQ0k0DhtzdtGoI/Ug+jdFDyCKB9P2+EPLh iMjMnFILp7Zs4r18ECHlvZuDZfH9m0BchXIxu5jLIuQyKUWrCRDZZEDNr510ZhhVfYSFPA8ms1nk jyzYFOHYQyv5IfML/3IBFKlON5OZa+V8EZYULYcNkp03DdWglafj7SXZ1/XgAbVYrC381UvrsYN8 jndVvoa1GWwe+NVlIIK7Q3uAjV3qLEDQpaNPg1rr0oAn6YmvTccjVMqj2YNwN+RHhKNzgRGxY5ct FaN+8fXZhRhpv3bVbAWuPZXoMYICajCCAmYCAQEwaDBUMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQ R2xvYmFsU2lnbiBudi1zYTEqMCgGA1UEAxMhR2xvYmFsU2lnbiBBdGxhcyBSMyBTTUlNRSBDQSAy MDIwAhABAz5xDls09r2CKyYRqnNbMA0GCWCGSAFlAwQCAQUAoIHUMC8GCSqGSIb3DQEJBDEiBCDC NJZiAn+hqgx8mUgE5tg/WFkF12p49W1JGVkocyRU8zAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcB MBwGCSqGSIb3DQEJBTEPFw0yMzA2MTAwODM0NDdaMGkGCSqGSIb3DQEJDzFcMFowCwYJYIZIAWUD BAEqMAsGCWCGSAFlAwQBFjALBglghkgBZQMEAQIwCgYIKoZIhvcNAwcwCwYJKoZIhvcNAQEKMAsG CSqGSIb3DQEBBzALBglghkgBZQMEAgEwDQYJKoZIhvcNAQEBBQAEggEAaGi/kY9fzj3sRA/YOKO3 T+vr4wZhbAN4UWnpT5WKKFg2mv5CXN8VSjpQhkaat3JmiVnJQTyMAhpqUgS+fy19Pu7lXLja9bWd J02Xxg59ebAX7o75EzTPgdGkpJJ4OXsrO/8WSZwlkR/Wobhb0NRjzeo2XwX/ryvgMT//mkVw1ff4 kdRF5Ix5kXT3Eq+6RjlDrAXVKj0kMW/nmDnLHtTUaFASh2oiZK6AmPdHT09PlQaESZjdV6vLuYLD Cc9D5s/CBTPQt3bDO+/YnT3rNjtQvoHiJq0ffja7coR2CE1QBZ8Ot7ykdIxJ87bw+CpBfC8nN9Zk BPY/Ed6ApQJIg4Sh8g== --000000000000b2c6fd05fdc25b12--