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 X-Spam-Level: X-Spam-Status: No, score=-7.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FSL_HELO_FAKE, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0FCB6C43461 for ; Tue, 8 Sep 2020 10:14:22 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id C029C207DE for ; Tue, 8 Sep 2020 10:14:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="hEF0zMkv"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=google.com header.i=@google.com header.b="AL4Qqujb" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C029C207DE Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=TwLoKWUlw5fAZwCnkdZIQRubihzbE/xUOXMdf4T9ySg=; b=hEF0zMkvEKe09/Ixx5CEeazMe mPyu6qfyGlsKel7ZuRedw6zjr+Pf+NdYvaT2SRL6duY7eVrSRqaqvrmVDAp3HbXrwmqbaxyYawWTq dkDq0MsCJJd+DltW3oIT80yMTZsI9ZalcPIfVO07nqxjEM1duvaJ7hCIKB+S0hTkuUZ4XEw/FtCOX 7LhZZ6I+OOmGSPrkOzyAI3EOQvQx2WZF9zH43vUHv+rgKrDV/qqQKd/sE/BAoh3hTi3aV2EaUAK6Q SRD62kpfb8Ih7vQ5aqHoypiMhnLG4xG219f62Kjqnv3hXj2KF8RLeu84cGvTJZQbxHB3mdVlzd4VZ 5lPQxUWiA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kFacj-0006Yv-EL; Tue, 08 Sep 2020 10:13:13 +0000 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kFacd-0006WH-QA for linux-arm-kernel@lists.infradead.org; Tue, 08 Sep 2020 10:13:10 +0000 Received: by mail-wr1-x444.google.com with SMTP id o5so18442239wrn.13 for ; Tue, 08 Sep 2020 03:13:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=3cIm4aOIMgid18s5SFvqtTHUdmbOu4lOwzIV5nuummY=; b=AL4QqujbSCH2p9h5sM6hPzRpZjjpzUGna5FOfproYEyVASvzCInno7O8FHg6gwy2P4 v6yuFzZFWTCc+iNGNatil/2LH02E9WuD74ZJBEkqwmTUyfnD4zyZGlAd+adCVIMNQmMq YvWHCBp3hfRxmbqfOxhhB04puOJWagOpXS/1kmn3yO6LRLY+0pQGxQDSkuBoldWmdaS8 rw2SxwTBqCVL9u0KHlpmAqvOWSYtuBuOWKC7ZQWmTX9X0B4ZMWuN/pz7jy4l0HCo7eST Zek7Lm2MT37pG0V5cCrABW0/a1jNzncxCD4Y4GzbXz9xhsP/IBBtDPRzXd2flCJjstzY 45QA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=3cIm4aOIMgid18s5SFvqtTHUdmbOu4lOwzIV5nuummY=; b=Hpk6JcvquS0UkRxEE2C2OK9zvzKWqb5urPiMpTvrULmPSFFwsDOQB1lTjWuBF/+Zc1 9N3mCWhv+rZ4lhp3pPothUF4pC2dftOZ84Rfy9OTTyHqV1P7bqoX34+p6LcIaai7kFMJ GasaeRUICfJd9gIwcs5XlHebHtn7iz1iXRDdeo+DLw+ffiMKhyiGgUVtsCeYibFdzwWO /H0lpJCXuw6f9+Unc4wE/jem3wKH7KHohtsS2D7khSMtGWkbC/Z8/C7XralYZw+6Grx0 v8qVESx1GWZitBXQq/Vga3PRDcOGTUAlWe2JpSTQ/C6ZUk8FHhL+pzvtCJqrNrqA+lnc MQHQ== X-Gm-Message-State: AOAM532rh/c//K+7cMgNxy6NrkDuDc8Eb31vZJwA/tz+3H579bVwUVeZ h6LqxlWDW9bBBu6OwGmoINlJqw== X-Google-Smtp-Source: ABdhPJweuPYI0fh/ItUUkJ4WQSRnC/AMg+WAaomsP/vQawqvEzwK+UrKDcEGabDOtqFFUV4z1e/GdA== X-Received: by 2002:adf:e9c7:: with SMTP id l7mr11671863wrn.93.1599559985300; Tue, 08 Sep 2020 03:13:05 -0700 (PDT) Received: from google.com ([2a00:79e0:d:109:4a0f:cfff:fe4a:6363]) by smtp.gmail.com with ESMTPSA id u66sm31633631wmg.44.2020.09.08.03.13.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2020 03:13:04 -0700 (PDT) Date: Tue, 8 Sep 2020 11:13:00 +0100 From: Andrew Scull To: Marc Zyngier Subject: Re: [PATCH v3 04/18] KVM: arm64: Restrict symbol aliasing to outside nVHE Message-ID: <20200908101300.GA3268721@google.com> References: <20200903135307.251331-1-ascull@google.com> <20200903135307.251331-5-ascull@google.com> <87zh61lvm9.wl-maz@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <87zh61lvm9.wl-maz@kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200908_061307_957471_D555A2B4 X-CRM114-Status: GOOD ( 27.97 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kernel-team@android.com, suzuki.poulose@arm.com, catalin.marinas@arm.com, james.morse@arm.com, linux-arm-kernel@lists.infradead.org, Sudeep Holla , David Brazdil , will@kernel.org, kvmarm@lists.cs.columbia.edu, julien.thierry.kdev@gmail.com Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Mon, Sep 07, 2020 at 11:38:38AM +0100, Marc Zyngier wrote: > Hi Andrew, > > On Thu, 03 Sep 2020 14:52:53 +0100, > Andrew Scull wrote: > > > > nVHE symbols are prefixed but this is sometimes hidden from the host by > > aliasing the non-prefixed symbol to the prefixed version with a macro. > > This runs into problems if nVHE tries to use the symbol as it becomes > > doubly prefixed. Avoid this by omitting the aliasing macro for nVHE. > > > > Cc: David Brazdil > > Signed-off-by: Andrew Scull > > --- > > arch/arm64/include/asm/kvm_asm.h | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h > > index 6f98fbd0ac81..6f9c4162a764 100644 > > --- a/arch/arm64/include/asm/kvm_asm.h > > +++ b/arch/arm64/include/asm/kvm_asm.h > > @@ -99,8 +99,11 @@ struct kvm_s2_mmu; > > > > DECLARE_KVM_NVHE_SYM(__kvm_hyp_init); > > DECLARE_KVM_HYP_SYM(__kvm_hyp_vector); > > + > > +#ifndef __KVM_NVHE_HYPERVISOR__ > > #define __kvm_hyp_init CHOOSE_NVHE_SYM(__kvm_hyp_init) > > #define __kvm_hyp_vector CHOOSE_HYP_SYM(__kvm_hyp_vector) > > +#endif > > Hmmm. Why do we limit this to these two symbols instead of making it a > property of the "CHOOSE_*" implementation? > > The use of CHOOSE_HYP_SYM is already forbidden in the EL2 code (see > how any symbol results in __nvhe_undefined_symbol being emitted). Does > anything break if we have: > > #define CHOOSE_NVHE_SYM(x) x > > when __KVM_NVHE_HYPERVISOR__ is defined? I've specialized the CHOOSE_* macros along the lines you suggested for each of the 3 relevant contexts: host, VHE and nVHE. If you think that's overkill, the host and VHE cases can be merged. diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h index 6f98fbd0ac81..a952859117b2 100644 --- a/arch/arm64/include/asm/kvm_asm.h +++ b/arch/arm64/include/asm/kvm_asm.h @@ -60,10 +60,24 @@ DECLARE_KVM_VHE_SYM(sym); \ DECLARE_KVM_NVHE_SYM(sym) +#if defined(__KVM_NVHE_HYPERVISOR__) + +#define CHOOSE_HYP_SYM(sym) CHOOSE_NVHE_SYM(sym) +#define CHOOSE_NVHE_SYM(sym) sym +/* The nVHE hypervisor shouldn't even try to access VHE symbols */ +extern void *__nvhe_undefined_symbol; +#define CHOOSE_VHE_SYM(sym) __nvhe_undefined_symbol + +#elif defined(__KVM_VHE_HYPERVISOR) + +#define CHOOSE_HYP_SYM(sym) CHOOSE_VHE_SYM(sym) #define CHOOSE_VHE_SYM(sym) sym -#define CHOOSE_NVHE_SYM(sym) kvm_nvhe_sym(sym) +/* The VHE hypervisor shouldn't even try to access nVHE symbols */ +extern void *__vhe_undefined_symbol; +#define CHOOSE_NVHE_SYM(sym) __vhe_undefined_symbol + +#else -#ifndef __KVM_NVHE_HYPERVISOR__ /* * BIG FAT WARNINGS: * @@ -77,10 +91,9 @@ */ #define CHOOSE_HYP_SYM(sym) (is_kernel_in_hyp_mode() ? CHOOSE_VHE_SYM(sym) \ : CHOOSE_NVHE_SYM(sym)) -#else -/* The nVHE hypervisor shouldn't even try to access anything */ -extern void *__nvhe_undefined_symbol; -#define CHOOSE_HYP_SYM(sym) __nvhe_undefined_symbol +#define CHOOSE_VHE_SYM(sym) sym +#define CHOOSE_NVHE_SYM(sym) kvm_nvhe_sym(sym) + #endif /* Translate a kernel address @ptr into its equivalent linear mapping */ _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel