All of lore.kernel.org
 help / color / mirror / Atom feed
From: Amit Daniel Kachhap <amit.kachhap@arm.com>
To: Dave Martin <Dave.Martin@arm.com>
Cc: linux-arm-kernel@lists.infradead.org,
	Marc Zyngier <marc.zyngier@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	Kristina Martsenko <kristina.martsenko@arm.com>,
	kvmarm@lists.cs.columbia.edu,
	Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [kvmtool PATCH v10 5/5] KVM: arm/arm64: Add a vcpu feature for pointer authentication
Date: Wed, 24 Apr 2019 12:32:22 +0530	[thread overview]
Message-ID: <3b7bafc9-5d6a-7845-ef1f-577ea59000e2@arm.com> (raw)
In-Reply-To: <20190423154625.GP3567@e103592.cambridge.arm.com>

Hi,

On 4/23/19 9:16 PM, Dave Martin wrote:
> On Tue, Apr 23, 2019 at 10:12:38AM +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 <amit.kachhap@arm.com>
>> ---
>>
>> Changes since v9:
>> * Added a error check for both enable-ptrauth and disable-ptrauth
>>    option.
>> * Make the error explicit when enable-ptrauth is provided [Dave Martin].
>>
>>   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                             | 20 ++++++++++++++++++--
>>   include/linux/kvm.h                       |  2 ++
>>   7 files changed, 32 insertions(+), 3 deletions(-)
>>
>> 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..acd1d5f 100644
>> --- a/arm/kvm-cpu.c
>> +++ b/arm/kvm-cpu.c
>> @@ -68,6 +68,18 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
>>   		vcpu_init.features[0] |= (1UL << KVM_ARM_VCPU_PSCI_0_2);
>>   	}
>>   
>> +	/* Check Pointer Authentication command line arguments. */
>> +	if (kvm->cfg.arch.enable_ptrauth && kvm->cfg.arch.disable_ptrauth)
>> +		die("Both enable-ptrauth and disable-ptrauth option cannot be present");
> 
> Preferably, print the leading dashes, the same as the user would see
> on the command line (e.g., --enable-ptrauth, --disable-ptrauth).
> 
> For brevity, we could write something like:
> 
> 		die("--enable-ptrauth conflicts with --disable-ptrauth");
> 
>> +	/*
>> +	 * Always enable Pointer Authentication if system supports
>> +	 * this extension unless disable-ptrauth option is present.
>> +	 */
>> +	if (kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_ADDRESS) &&
>> +	    kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_GENERIC) &&
>> +	    !kvm->cfg.arch.disable_ptrauth)
>> +			vcpu_init.features[0] |= ARM_VCPU_PTRAUTH_FEATURE;
>> +
>>   	/*
>>   	 * If the preferred target ioctl is successful then
>>   	 * use preferred target else try each and every target type
>> @@ -106,8 +118,12 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
>>   			die("Unable to find matching target");
>>   	}
>>   
>> -	if (err || target->init(vcpu))
>> -		die("Unable to initialise vcpu");
>> +	if (err || target->init(vcpu)) {
>> +		if (kvm->cfg.arch.enable_ptrauth)
>> +			die("Unable to initialise vcpu with pointer authentication feature");
> 
> We don't special-case this error message for any other feature yet:
> there are a variety of reasons why we might have failed, so suggesting
> that the failure is something to do with ptrauth may be misleading to
> the user.
> 
> If we want to be more informative, we could do something like the
> following:
> 
> 	bool supported;
> 
> 	supported = kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_ADDRESS) &&
> 		    kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_GENERIC);
> 
> 	if (kvm->cfg.arch.enable_ptrauth && !supported)
> 		die("--enable-ptrauth not supported on this host");
> 
> 	if (supported && !kvm->cfg.arch.disable_ptrauth)
> 		vcpu_init.features[0] |= ARM_VCPU_PTRAUTH_FEATURE;
> 
> 	/* ... */
> 
> 	if (err || target->init(vcpu))
> 		die("Unable to initialise vcpu");
> 
> We don't do this for any other feature today, but since it helps the
> user to understand what went wrong it's probably a good idea.
Yes this is more clear. As Mark has picked the core guest ptrauth 
patches. I will post this changes as standalone.

Thanks,
Amit Daniel
> 
> [...]
> 
> Cheers
> ---Dave
> 

WARNING: multiple messages have this Message-ID (diff)
From: Amit Daniel Kachhap <amit.kachhap@arm.com>
To: Dave Martin <Dave.Martin@arm.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	linux-kernel@vger.kernel.org,
	Kristina Martsenko <kristina.martsenko@arm.com>,
	Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>,
	kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [kvmtool PATCH v10 5/5] KVM: arm/arm64: Add a vcpu feature for pointer authentication
Date: Wed, 24 Apr 2019 12:32:22 +0530	[thread overview]
Message-ID: <3b7bafc9-5d6a-7845-ef1f-577ea59000e2@arm.com> (raw)
Message-ID: <20190424070222.pfPVczJ9xet-2tUMjE0mFLEVIG9mnMOAphVHq6OPLT0@z> (raw)
In-Reply-To: <20190423154625.GP3567@e103592.cambridge.arm.com>

Hi,

On 4/23/19 9:16 PM, Dave Martin wrote:
> On Tue, Apr 23, 2019 at 10:12:38AM +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 <amit.kachhap@arm.com>
>> ---
>>
>> Changes since v9:
>> * Added a error check for both enable-ptrauth and disable-ptrauth
>>    option.
>> * Make the error explicit when enable-ptrauth is provided [Dave Martin].
>>
>>   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                             | 20 ++++++++++++++++++--
>>   include/linux/kvm.h                       |  2 ++
>>   7 files changed, 32 insertions(+), 3 deletions(-)
>>
>> 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..acd1d5f 100644
>> --- a/arm/kvm-cpu.c
>> +++ b/arm/kvm-cpu.c
>> @@ -68,6 +68,18 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
>>   		vcpu_init.features[0] |= (1UL << KVM_ARM_VCPU_PSCI_0_2);
>>   	}
>>   
>> +	/* Check Pointer Authentication command line arguments. */
>> +	if (kvm->cfg.arch.enable_ptrauth && kvm->cfg.arch.disable_ptrauth)
>> +		die("Both enable-ptrauth and disable-ptrauth option cannot be present");
> 
> Preferably, print the leading dashes, the same as the user would see
> on the command line (e.g., --enable-ptrauth, --disable-ptrauth).
> 
> For brevity, we could write something like:
> 
> 		die("--enable-ptrauth conflicts with --disable-ptrauth");
> 
>> +	/*
>> +	 * Always enable Pointer Authentication if system supports
>> +	 * this extension unless disable-ptrauth option is present.
>> +	 */
>> +	if (kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_ADDRESS) &&
>> +	    kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_GENERIC) &&
>> +	    !kvm->cfg.arch.disable_ptrauth)
>> +			vcpu_init.features[0] |= ARM_VCPU_PTRAUTH_FEATURE;
>> +
>>   	/*
>>   	 * If the preferred target ioctl is successful then
>>   	 * use preferred target else try each and every target type
>> @@ -106,8 +118,12 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
>>   			die("Unable to find matching target");
>>   	}
>>   
>> -	if (err || target->init(vcpu))
>> -		die("Unable to initialise vcpu");
>> +	if (err || target->init(vcpu)) {
>> +		if (kvm->cfg.arch.enable_ptrauth)
>> +			die("Unable to initialise vcpu with pointer authentication feature");
> 
> We don't special-case this error message for any other feature yet:
> there are a variety of reasons why we might have failed, so suggesting
> that the failure is something to do with ptrauth may be misleading to
> the user.
> 
> If we want to be more informative, we could do something like the
> following:
> 
> 	bool supported;
> 
> 	supported = kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_ADDRESS) &&
> 		    kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_GENERIC);
> 
> 	if (kvm->cfg.arch.enable_ptrauth && !supported)
> 		die("--enable-ptrauth not supported on this host");
> 
> 	if (supported && !kvm->cfg.arch.disable_ptrauth)
> 		vcpu_init.features[0] |= ARM_VCPU_PTRAUTH_FEATURE;
> 
> 	/* ... */
> 
> 	if (err || target->init(vcpu))
> 		die("Unable to initialise vcpu");
> 
> We don't do this for any other feature today, but since it helps the
> user to understand what went wrong it's probably a good idea.
Yes this is more clear. As Mark has picked the core guest ptrauth 
patches. I will post this changes as standalone.

Thanks,
Amit Daniel
> 
> [...]
> 
> Cheers
> ---Dave
> 
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

WARNING: multiple messages have this Message-ID (diff)
From: Amit Daniel Kachhap <amit.kachhap@arm.com>
To: Dave Martin <Dave.Martin@arm.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>,
	linux-kernel@vger.kernel.org,
	Kristina Martsenko <kristina.martsenko@arm.com>,
	Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>,
	kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [kvmtool PATCH v10 5/5] KVM: arm/arm64: Add a vcpu feature for pointer authentication
Date: Wed, 24 Apr 2019 12:32:22 +0530	[thread overview]
Message-ID: <3b7bafc9-5d6a-7845-ef1f-577ea59000e2@arm.com> (raw)
In-Reply-To: <20190423154625.GP3567@e103592.cambridge.arm.com>

Hi,

On 4/23/19 9:16 PM, Dave Martin wrote:
> On Tue, Apr 23, 2019 at 10:12:38AM +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 <amit.kachhap@arm.com>
>> ---
>>
>> Changes since v9:
>> * Added a error check for both enable-ptrauth and disable-ptrauth
>>    option.
>> * Make the error explicit when enable-ptrauth is provided [Dave Martin].
>>
>>   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                             | 20 ++++++++++++++++++--
>>   include/linux/kvm.h                       |  2 ++
>>   7 files changed, 32 insertions(+), 3 deletions(-)
>>
>> 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..acd1d5f 100644
>> --- a/arm/kvm-cpu.c
>> +++ b/arm/kvm-cpu.c
>> @@ -68,6 +68,18 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
>>   		vcpu_init.features[0] |= (1UL << KVM_ARM_VCPU_PSCI_0_2);
>>   	}
>>   
>> +	/* Check Pointer Authentication command line arguments. */
>> +	if (kvm->cfg.arch.enable_ptrauth && kvm->cfg.arch.disable_ptrauth)
>> +		die("Both enable-ptrauth and disable-ptrauth option cannot be present");
> 
> Preferably, print the leading dashes, the same as the user would see
> on the command line (e.g., --enable-ptrauth, --disable-ptrauth).
> 
> For brevity, we could write something like:
> 
> 		die("--enable-ptrauth conflicts with --disable-ptrauth");
> 
>> +	/*
>> +	 * Always enable Pointer Authentication if system supports
>> +	 * this extension unless disable-ptrauth option is present.
>> +	 */
>> +	if (kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_ADDRESS) &&
>> +	    kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_GENERIC) &&
>> +	    !kvm->cfg.arch.disable_ptrauth)
>> +			vcpu_init.features[0] |= ARM_VCPU_PTRAUTH_FEATURE;
>> +
>>   	/*
>>   	 * If the preferred target ioctl is successful then
>>   	 * use preferred target else try each and every target type
>> @@ -106,8 +118,12 @@ struct kvm_cpu *kvm_cpu__arch_init(struct kvm *kvm, unsigned long cpu_id)
>>   			die("Unable to find matching target");
>>   	}
>>   
>> -	if (err || target->init(vcpu))
>> -		die("Unable to initialise vcpu");
>> +	if (err || target->init(vcpu)) {
>> +		if (kvm->cfg.arch.enable_ptrauth)
>> +			die("Unable to initialise vcpu with pointer authentication feature");
> 
> We don't special-case this error message for any other feature yet:
> there are a variety of reasons why we might have failed, so suggesting
> that the failure is something to do with ptrauth may be misleading to
> the user.
> 
> If we want to be more informative, we could do something like the
> following:
> 
> 	bool supported;
> 
> 	supported = kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_ADDRESS) &&
> 		    kvm__supports_extension(kvm, KVM_CAP_ARM_PTRAUTH_GENERIC);
> 
> 	if (kvm->cfg.arch.enable_ptrauth && !supported)
> 		die("--enable-ptrauth not supported on this host");
> 
> 	if (supported && !kvm->cfg.arch.disable_ptrauth)
> 		vcpu_init.features[0] |= ARM_VCPU_PTRAUTH_FEATURE;
> 
> 	/* ... */
> 
> 	if (err || target->init(vcpu))
> 		die("Unable to initialise vcpu");
> 
> We don't do this for any other feature today, but since it helps the
> user to understand what went wrong it's probably a good idea.
Yes this is more clear. As Mark has picked the core guest ptrauth 
patches. I will post this changes as standalone.

Thanks,
Amit Daniel
> 
> [...]
> 
> Cheers
> ---Dave
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2019-04-24  7:02 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-23  4:42 [PATCH v10 0/5] Add ARMv8.3 pointer authentication for kvm guest Amit Daniel Kachhap
2019-04-23  4:42 ` Amit Daniel Kachhap
2019-04-23  4:42 ` Amit Daniel Kachhap
2019-04-23  4:42 ` [PATCH v10 1/5] KVM: arm64: Add a vcpu flag to control ptrauth for guest Amit Daniel Kachhap
2019-04-23  4:42   ` Amit Daniel Kachhap
2019-04-23  4:42   ` Amit Daniel Kachhap
2019-04-23 15:44   ` Dave Martin
2019-04-23 15:44     ` Dave Martin
2019-04-23 15:44     ` Dave Martin
2019-04-24  5:57     ` Amit Daniel Kachhap
2019-04-24  5:57       ` Amit Daniel Kachhap
2019-04-24  5:57       ` Amit Daniel Kachhap
2019-04-24 13:42       ` Dave Martin
2019-04-24 13:42         ` Dave Martin
2019-04-24 13:42         ` Dave Martin
2019-04-23  4:42 ` [PATCH v10 2/5] KVM: arm/arm64: context-switch ptrauth registers Amit Daniel Kachhap
2019-04-23  4:42   ` Amit Daniel Kachhap
2019-04-23  4:42   ` Amit Daniel Kachhap
2019-04-23  4:42   ` Amit Daniel Kachhap
2019-04-23  9:39   ` Marc Zyngier
2019-04-23  9:39     ` Marc Zyngier
2019-04-23  9:39     ` Marc Zyngier
2019-04-23  9:39     ` Marc Zyngier
2019-04-23 10:24     ` Amit Daniel Kachhap
2019-04-23 10:24       ` Amit Daniel Kachhap
2019-04-23 10:24       ` Amit Daniel Kachhap
2019-04-23 15:44       ` Dave Martin
2019-04-23 15:44         ` Dave Martin
2019-04-23 15:44         ` Dave Martin
2019-04-24 10:29         ` Marc Zyngier
2019-04-24 10:29           ` Marc Zyngier
2019-04-24 10:29           ` Marc Zyngier
2019-04-24 13:40           ` Dave Martin
2019-04-24 13:40             ` Dave Martin
2019-04-24 13:40             ` Dave Martin
2019-04-24 13:39   ` Dave Martin
2019-04-24 13:39     ` Dave Martin
2019-04-24 13:39     ` Dave Martin
2019-04-24 13:39     ` Dave Martin
2019-04-24 14:29     ` Marc Zyngier
2019-04-24 14:29       ` Marc Zyngier
2019-04-24 14:29       ` Marc Zyngier
2019-04-24 14:30       ` Dave P Martin
2019-04-24 14:30         ` Dave P Martin
2019-04-24 14:30         ` Dave P Martin
2019-04-24 14:30         ` Dave P Martin
2019-04-23  4:42 ` [PATCH v10 3/5] KVM: arm64: Add userspace flag to enable pointer authentication Amit Daniel Kachhap
2019-04-23  4:42   ` Amit Daniel Kachhap
2019-04-23  4:42   ` Amit Daniel Kachhap
2019-04-23 15:45   ` Dave Martin
2019-04-23 15:45     ` Dave Martin
2019-04-23 15:45     ` Dave Martin
2019-04-24  6:39     ` Amit Daniel Kachhap
2019-04-24  6:39       ` Amit Daniel Kachhap
2019-04-24  6:39       ` Amit Daniel Kachhap
2019-04-23  4:42 ` [PATCH v10 4/5] KVM: arm64: Add capability to advertise ptrauth for guest Amit Daniel Kachhap
2019-04-23  4:42   ` Amit Daniel Kachhap
2019-04-23  4:42   ` Amit Daniel Kachhap
2019-04-23 15:45   ` Dave Martin
2019-04-23 15:45     ` Dave Martin
2019-04-23 15:45     ` Dave Martin
2019-04-23  4:42 ` [kvmtool PATCH v10 5/5] KVM: arm/arm64: Add a vcpu feature for pointer authentication Amit Daniel Kachhap
2019-04-23  4:42   ` Amit Daniel Kachhap
2019-04-23  4:42   ` Amit Daniel Kachhap
2019-04-23 15:46   ` Dave Martin
2019-04-23 15:46     ` Dave Martin
2019-04-23 15:46     ` Dave Martin
2019-04-24  7:02     ` Amit Daniel Kachhap [this message]
2019-04-24  7:02       ` Amit Daniel Kachhap
2019-04-24  7:02       ` Amit Daniel Kachhap
2019-04-24 13:41       ` Dave Martin
2019-04-24 13:41         ` Dave Martin
2019-04-24 13:41         ` Dave Martin
2019-05-28 10:11         ` Dave Martin
2019-05-28 10:11           ` Dave Martin
2019-05-28 10:11           ` Dave Martin
2019-05-28 12:48           ` Amit Daniel Kachhap
2019-05-28 12:48             ` Amit Daniel Kachhap
2019-05-28 12:48             ` Amit Daniel Kachhap
2019-05-28 13:38             ` Dave Martin
2019-05-28 13:38               ` Dave Martin
2019-05-28 13:38               ` Dave Martin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3b7bafc9-5d6a-7845-ef1f-577ea59000e2@arm.com \
    --to=amit.kachhap@arm.com \
    --cc=Dave.Martin@arm.com \
    --cc=catalin.marinas@arm.com \
    --cc=kristina.martsenko@arm.com \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marc.zyngier@arm.com \
    --cc=ramana.radhakrishnan@arm.com \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.