Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp3350942yba; Tue, 16 Apr 2019 09:34:48 -0700 (PDT) X-Google-Smtp-Source: APXvYqxzNq/iRyka6LHLGe3emjgjuNhna/GB6KKTqu5kKFL4DtnDYdlRd+VBEfBCiuusLhX+JppH X-Received: by 2002:a63:6786:: with SMTP id b128mr78144516pgc.318.1555432488508; Tue, 16 Apr 2019 09:34:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1555432488; cv=none; d=google.com; s=arc-20160816; b=x+vpCsqmwn7RYMqZsH3T7+k9c5mmhbH+yOkaM41FCZTG0ROxVPbVA+ifKshJXj7UCH QCB8VmOP2sWC3eM0wHK80jXDbLBYMump/4liknJhQ2R4aqY9WvhdUflJltAzwoKmWlIL +cr9aXCadMuAfq/2WMCeiBPst5lk9iHqQrSXpdMWLT54JRvqrA+JYOkJUuaGzqqUBpkB mrmcLRX6LmOl3U2cKzSJeMXOkKDsm29HYdvj+h9ryvwBSgUhoZ35dQxvA0YxMVXA6j10 zyX/YMg+X2Va73gcrhQ/6yrFDUbEKnISppmcvMzLBiwLqS/qGMAkSsXgVbVVyXPXlVdL D3Jg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=53N9ArnJvqZDS9nMd/Y3D2pbaJ5oTwHvlIfq1lVG9gI=; b=XxAye+J362liet8sQLtgEwE6LCpzdbchXIK9iy8yiwbHG7+mFuOMniMDTbj2+Bj20L vQ/imGR+5H8Xdgvuch9VItLLGUviGUp8JTK0ymKA1A3oyf+s02mdyBgOT6Vq1rqlUrgQ PnHiFj0OJnWctpA2bb67peUjBMHHtqJVeZ0RjTjhWWEnTwooavyt8TmKEbkiwFxI6wbC RPcL51+32N+aKSwI/VmuZToAK8qZMwVj5V4TEeVQ0zo3bPHRNyhlUL2mw+oKXDe/esW7 ZuMBbRQ124SVhhTKX/VsgIV89YOtf6f7cCuuabvfVoeqDYIYXIJJQvXxiI14O+74xIlr Qujg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b34si39358232pla.381.2019.04.16.09.34.32; Tue, 16 Apr 2019 09:34:48 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730027AbfDPQc1 (ORCPT + 99 others); Tue, 16 Apr 2019 12:32:27 -0400 Received: from foss.arm.com ([217.140.101.70]:59382 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726647AbfDPQc0 (ORCPT ); Tue, 16 Apr 2019 12:32:26 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id C8CA380D; Tue, 16 Apr 2019 09:32:25 -0700 (PDT) Received: from e103592.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.72.51.249]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2B2C43F59C; Tue, 16 Apr 2019 09:32:24 -0700 (PDT) Date: Tue, 16 Apr 2019 17:32:21 +0100 From: Dave Martin To: Amit Daniel Kachhap Cc: linux-arm-kernel@lists.infradead.org, Marc Zyngier , Catalin Marinas , Will Deacon , Kristina Martsenko , kvmarm@lists.cs.columbia.edu, Ramana Radhakrishnan , linux-kernel@vger.kernel.org Subject: Re: [kvmtool PATCH v9 5/5] KVM: arm/arm64: Add a vcpu feature for pointer authentication Message-ID: <20190416163221.GY3567@e103592.cambridge.arm.com> References: <1555039236-10608-1-git-send-email-amit.kachhap@arm.com> <1555039236-10608-6-git-send-email-amit.kachhap@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1555039236-10608-6-git-send-email-amit.kachhap@arm.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Apr 12, 2019 at 08:50:36AM +0530, Amit Daniel Kachhap wrote: > This patch adds a runtime capabality for KVM tool to enable Arm64 8.3 > Pointer Authentication in guest kernel. Two vcpu features > KVM_ARM_VCPU_PTRAUTH_[ADDRESS/GENERIC] are supplied together to enable > Pointer Authentication in KVM guest after checking the capability. > > Command line options --enable-ptrauth and --disable-ptrauth are added > to use this feature. However, if those options are not provided then > also this feature is enabled if host supports this capability. > > The macros defined in the headers are not in sync and should be replaced > from the upstream. > > Signed-off-by: Amit Daniel Kachhap > --- > Changes since v8: > * Added option --enable-ptrauth and --disable-ptrauth to use ptrauth. Also > enable ptrauth if no option provided and Host supports ptrauth. [Dave Martin] > * The macro definition are not linear as the kvmtool is not synchronised with the > kernel changes present in kvmarm/next tree. > > arm/aarch32/include/kvm/kvm-cpu-arch.h | 1 + > arm/aarch64/include/asm/kvm.h | 2 ++ > arm/aarch64/include/kvm/kvm-config-arch.h | 6 +++++- > arm/aarch64/include/kvm/kvm-cpu-arch.h | 2 ++ > arm/include/arm-common/kvm-config-arch.h | 2 ++ > arm/kvm-cpu.c | 11 +++++++++++ > include/linux/kvm.h | 2 ++ > 7 files changed, 25 insertions(+), 1 deletion(-) > > diff --git a/arm/aarch32/include/kvm/kvm-cpu-arch.h b/arm/aarch32/include/kvm/kvm-cpu-arch.h > index d28ea67..520ea76 100644 > --- a/arm/aarch32/include/kvm/kvm-cpu-arch.h > +++ b/arm/aarch32/include/kvm/kvm-cpu-arch.h > @@ -13,4 +13,5 @@ > #define ARM_CPU_ID 0, 0, 0 > #define ARM_CPU_ID_MPIDR 5 > > +#define ARM_VCPU_PTRAUTH_FEATURE 0 > #endif /* KVM__KVM_CPU_ARCH_H */ > diff --git a/arm/aarch64/include/asm/kvm.h b/arm/aarch64/include/asm/kvm.h > index 97c3478..a2546e6 100644 > --- a/arm/aarch64/include/asm/kvm.h > +++ b/arm/aarch64/include/asm/kvm.h > @@ -102,6 +102,8 @@ struct kvm_regs { > #define KVM_ARM_VCPU_EL1_32BIT 1 /* CPU running a 32bit VM */ > #define KVM_ARM_VCPU_PSCI_0_2 2 /* CPU uses PSCI v0.2 */ > #define KVM_ARM_VCPU_PMU_V3 3 /* Support guest PMUv3 */ > +#define KVM_ARM_VCPU_PTRAUTH_ADDRESS 5 /* CPU uses address pointer authentication */ > +#define KVM_ARM_VCPU_PTRAUTH_GENERIC 6 /* CPU uses generic pointer authentication */ > > struct kvm_vcpu_init { > __u32 target; > diff --git a/arm/aarch64/include/kvm/kvm-config-arch.h b/arm/aarch64/include/kvm/kvm-config-arch.h > index 04be43d..0279b13 100644 > --- a/arm/aarch64/include/kvm/kvm-config-arch.h > +++ b/arm/aarch64/include/kvm/kvm-config-arch.h > @@ -8,7 +8,11 @@ > "Create PMUv3 device"), \ > OPT_U64('\0', "kaslr-seed", &(cfg)->kaslr_seed, \ > "Specify random seed for Kernel Address Space " \ > - "Layout Randomization (KASLR)"), > + "Layout Randomization (KASLR)"), \ > + OPT_BOOLEAN('\0', "enable-ptrauth", &(cfg)->enable_ptrauth, \ > + "Enables pointer authentication"), \ > + OPT_BOOLEAN('\0', "disable-ptrauth", &(cfg)->disable_ptrauth, \ > + "Disables pointer authentication"), > > #include "arm-common/kvm-config-arch.h" > > diff --git a/arm/aarch64/include/kvm/kvm-cpu-arch.h b/arm/aarch64/include/kvm/kvm-cpu-arch.h > index a9d8563..fcc2107 100644 > --- a/arm/aarch64/include/kvm/kvm-cpu-arch.h > +++ b/arm/aarch64/include/kvm/kvm-cpu-arch.h > @@ -17,4 +17,6 @@ > #define ARM_CPU_CTRL 3, 0, 1, 0 > #define ARM_CPU_CTRL_SCTLR_EL1 0 > > +#define ARM_VCPU_PTRAUTH_FEATURE ((1UL << KVM_ARM_VCPU_PTRAUTH_ADDRESS) \ > + | (1UL << KVM_ARM_VCPU_PTRAUTH_GENERIC)) > #endif /* KVM__KVM_CPU_ARCH_H */ > diff --git a/arm/include/arm-common/kvm-config-arch.h b/arm/include/arm-common/kvm-config-arch.h > index 5734c46..1b4287d 100644 > --- a/arm/include/arm-common/kvm-config-arch.h > +++ b/arm/include/arm-common/kvm-config-arch.h > @@ -10,6 +10,8 @@ struct kvm_config_arch { > bool aarch32_guest; > bool has_pmuv3; > u64 kaslr_seed; > + bool enable_ptrauth; > + bool disable_ptrauth; > enum irqchip_type irqchip; > u64 fw_addr; > }; > diff --git a/arm/kvm-cpu.c b/arm/kvm-cpu.c > index 7780251..a45a649 100644 > --- a/arm/kvm-cpu.c > +++ b/arm/kvm-cpu.c > @@ -69,6 +69,17 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id) > } > > /* > + * Always enable Pointer Authentication if requested. If system supports > + * this extension then also enable it by default provided no disable > + * request present. > + */ > + if ((kvm->cfg.arch.enable_ptrauth) || Nit: redundant () > + (kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_ADDRESS) && Funny indentation? > + kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_GENERIC) && > + !kvm->cfg.arch.disable_ptrauth)) > + vcpu_init.features[0] |= ARM_VCPU_PTRAUTH_FEATURE; > + Hmm, we have some weird behaviours here: --enable-ptrauth --disable-ptrauth will result in us trying to enable it, and --enable-ptrauth without the required caps will result in an unhelpful "Unable to initialise vcpu" error message. I'm not sure this is a whole lot worse than the way other options behave today, though. You could try to be more explicit about what happens in these cases, but I'm not sure it's worth it given the state of the existing code. [...] Cheers ---Dave