[XEN PATCH] xen/arm: Hide Pointer Authentication (PAC)

Vladimir Murzin posted 1 patch 3 years, 3 months ago
Test env passed
Patches applied successfully (tree, apply log)
git fetch https://gitlab.com/xen-project/patchew/xen tags/patchew/20210120112712.9534-1-vladimir.murzin@arm.com
xen/arch/arm/cpufeature.c        |  6 +++++
xen/include/asm-arm/cpufeature.h | 38 +++++++++++++++++++++++++++++++-
2 files changed, 43 insertions(+), 1 deletion(-)
[XEN PATCH] xen/arm: Hide Pointer Authentication (PAC)
Posted by Vladimir Murzin 3 years, 3 months ago
The ARMv8.3 Pointer Authentication extension is not supported by Xen
at the moment, so do not expose that via ID register.

Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
---
 xen/arch/arm/cpufeature.c        |  6 +++++
 xen/include/asm-arm/cpufeature.h | 38 +++++++++++++++++++++++++++++++-
 2 files changed, 43 insertions(+), 1 deletion(-)

diff --git a/xen/arch/arm/cpufeature.c b/xen/arch/arm/cpufeature.c
index 99fe4db28..1d8878380 100644
--- a/xen/arch/arm/cpufeature.c
+++ b/xen/arch/arm/cpufeature.c
@@ -187,6 +187,12 @@ static int __init create_guest_cpuinfo(void)
 
     /* Hide MTE support as Xen does not support it */
     guest_cpuinfo.pfr64.mte = 0;
+
+    /* Hide PAC support as Xen does not support it */
+    guest_cpuinfo.isa64.apa = 0;
+    guest_cpuinfo.isa64.api = 0;
+    guest_cpuinfo.isa64.gpa = 0;
+    guest_cpuinfo.isa64.gpi = 0;
 #endif
 
     /* Hide AMU support */
diff --git a/xen/include/asm-arm/cpufeature.h b/xen/include/asm-arm/cpufeature.h
index c6e5711b2..43135abef 100644
--- a/xen/include/asm-arm/cpufeature.h
+++ b/xen/include/asm-arm/cpufeature.h
@@ -212,8 +212,44 @@ struct cpuinfo_arm {
         };
     } mm64;
 
-    struct {
+    union {
         uint64_t bits[2];
+        struct {
+            /* ISAR0 */
+            unsigned long __res0:4;
+            unsigned long aes:4;
+            unsigned long sha1:4;
+            unsigned long sha2:4;
+            unsigned long crc32:4;
+            unsigned long atomic:4;
+            unsigned long __res1:4;
+            unsigned long rdm:4;
+            unsigned long sha3:4;
+            unsigned long sm3:4;
+            unsigned long sm4:4;
+            unsigned long dp:4;
+            unsigned long fhm:4;
+            unsigned long ts:4;
+            unsigned long tlb:4;
+            unsigned long rndr:4;
+
+            /* ISAR1 */
+            unsigned long dpb:4;
+            unsigned long apa:4;
+            unsigned long api:4;
+            unsigned long jscvt:4;
+            unsigned long fcma:4;
+            unsigned long lrcpc:4;
+            unsigned long gpa:4;
+            unsigned long gpi:4;
+            unsigned long frintts:4;
+            unsigned long sb:4;
+            unsigned long specres:4;
+            unsigned long bf16:4;
+            unsigned long dgh:4;
+            unsigned long i8mm:4;
+            unsigned long __res0:8;
+        };
     } isa64;
 
     struct {
-- 
2.24.0


Re: [XEN PATCH] xen/arm: Hide Pointer Authentication (PAC)
Posted by Julien Grall 3 years, 3 months ago
Hi Vladimir,

On 20/01/2021 11:27, Vladimir Murzin wrote:
> The ARMv8.3 Pointer Authentication extension is not supported by Xen
> at the moment, so do not expose that via ID register.
> 
> Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
> Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
> ---
>   xen/arch/arm/cpufeature.c        |  6 +++++
>   xen/include/asm-arm/cpufeature.h | 38 +++++++++++++++++++++++++++++++-
>   2 files changed, 43 insertions(+), 1 deletion(-)
> 
> diff --git a/xen/arch/arm/cpufeature.c b/xen/arch/arm/cpufeature.c
> index 99fe4db28..1d8878380 100644
> --- a/xen/arch/arm/cpufeature.c
> +++ b/xen/arch/arm/cpufeature.c
> @@ -187,6 +187,12 @@ static int __init create_guest_cpuinfo(void)
>   
>       /* Hide MTE support as Xen does not support it */
>       guest_cpuinfo.pfr64.mte = 0;
> +
> +    /* Hide PAC support as Xen does not support it */
> +    guest_cpuinfo.isa64.apa = 0;
> +    guest_cpuinfo.isa64.api = 0;
> +    guest_cpuinfo.isa64.gpa = 0;
> +    guest_cpuinfo.isa64.gpi = 0;
>   #endif
>   
>       /* Hide AMU support */
> diff --git a/xen/include/asm-arm/cpufeature.h b/xen/include/asm-arm/cpufeature.h
> index c6e5711b2..43135abef 100644
> --- a/xen/include/asm-arm/cpufeature.h
> +++ b/xen/include/asm-arm/cpufeature.h
> @@ -212,8 +212,44 @@ struct cpuinfo_arm {
>           };
>       } mm64;
>   
> -    struct {
> +    union {
>           uint64_t bits[2];
> +        struct {
> +            /* ISAR0 */
> +            unsigned long __res0:4;
> +            unsigned long aes:4;
> +            unsigned long sha1:4;
> +            unsigned long sha2:4;
> +            unsigned long crc32:4;
> +            unsigned long atomic:4;
> +            unsigned long __res1:4;
> +            unsigned long rdm:4;
> +            unsigned long sha3:4;
> +            unsigned long sm3:4;
> +            unsigned long sm4:4;
> +            unsigned long dp:4;
> +            unsigned long fhm:4;
> +            unsigned long ts:4;
> +            unsigned long tlb:4;
> +            unsigned long rndr:4;
> +
> +            /* ISAR1 */
> +            unsigned long dpb:4;
> +            unsigned long apa:4;
> +            unsigned long api:4;
> +            unsigned long jscvt:4;
> +            unsigned long fcma:4;
> +            unsigned long lrcpc:4;
> +            unsigned long gpa:4;
> +            unsigned long gpi:4;
> +            unsigned long frintts:4;
> +            unsigned long sb:4;
> +            unsigned long specres:4;
> +            unsigned long bf16:4;
> +            unsigned long dgh:4;
> +            unsigned long i8mm:4;
> +            unsigned long __res0:8;

This unfortunately break the build on arm64 becase __res0 is defined 
twiced in the structure:

oss/xen/xen/include/asm/cpufeature.h:251:27: error: duplicate member 
‘__res0’
              unsigned long __res0:8;
                            ^~~~~~

The change is trivial, so I have resolved it (see change below) and 
committed it:

diff --git a/xen/include/asm-arm/cpufeature.h 
b/xen/include/asm-arm/cpufeature.h
index 2baf7919615d..70cb67301f74 100644
--- a/xen/include/asm-arm/cpufeature.h
+++ b/xen/include/asm-arm/cpufeature.h
@@ -248,7 +248,7 @@ struct cpuinfo_arm {
              unsigned long bf16:4;
              unsigned long dgh:4;
              unsigned long i8mm:4;
-            unsigned long __res0:8;
+            unsigned long __res2:8;
          };
      } isa64;

Cheers,

-- 
Julien Grall

Re: [XEN PATCH] xen/arm: Hide Pointer Authentication (PAC)
Posted by Vladimir Murzin 3 years, 3 months ago
On 1/20/21 5:44 PM, Julien Grall wrote:
> Hi Vladimir,
> 
> On 20/01/2021 11:27, Vladimir Murzin wrote:
>> The ARMv8.3 Pointer Authentication extension is not supported by Xen
>> at the moment, so do not expose that via ID register.
>>
>> Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
>> Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
>> ---
>>   xen/arch/arm/cpufeature.c        |  6 +++++
>>   xen/include/asm-arm/cpufeature.h | 38 +++++++++++++++++++++++++++++++-
>>   2 files changed, 43 insertions(+), 1 deletion(-)
>>
>> diff --git a/xen/arch/arm/cpufeature.c b/xen/arch/arm/cpufeature.c
>> index 99fe4db28..1d8878380 100644
>> --- a/xen/arch/arm/cpufeature.c
>> +++ b/xen/arch/arm/cpufeature.c
>> @@ -187,6 +187,12 @@ static int __init create_guest_cpuinfo(void)
>>         /* Hide MTE support as Xen does not support it */
>>       guest_cpuinfo.pfr64.mte = 0;
>> +
>> +    /* Hide PAC support as Xen does not support it */
>> +    guest_cpuinfo.isa64.apa = 0;
>> +    guest_cpuinfo.isa64.api = 0;
>> +    guest_cpuinfo.isa64.gpa = 0;
>> +    guest_cpuinfo.isa64.gpi = 0;
>>   #endif
>>         /* Hide AMU support */
>> diff --git a/xen/include/asm-arm/cpufeature.h b/xen/include/asm-arm/cpufeature.h
>> index c6e5711b2..43135abef 100644
>> --- a/xen/include/asm-arm/cpufeature.h
>> +++ b/xen/include/asm-arm/cpufeature.h
>> @@ -212,8 +212,44 @@ struct cpuinfo_arm {
>>           };
>>       } mm64;
>>   -    struct {
>> +    union {
>>           uint64_t bits[2];
>> +        struct {
>> +            /* ISAR0 */
>> +            unsigned long __res0:4;
>> +            unsigned long aes:4;
>> +            unsigned long sha1:4;
>> +            unsigned long sha2:4;
>> +            unsigned long crc32:4;
>> +            unsigned long atomic:4;
>> +            unsigned long __res1:4;
>> +            unsigned long rdm:4;
>> +            unsigned long sha3:4;
>> +            unsigned long sm3:4;
>> +            unsigned long sm4:4;
>> +            unsigned long dp:4;
>> +            unsigned long fhm:4;
>> +            unsigned long ts:4;
>> +            unsigned long tlb:4;
>> +            unsigned long rndr:4;
>> +
>> +            /* ISAR1 */
>> +            unsigned long dpb:4;
>> +            unsigned long apa:4;
>> +            unsigned long api:4;
>> +            unsigned long jscvt:4;
>> +            unsigned long fcma:4;
>> +            unsigned long lrcpc:4;
>> +            unsigned long gpa:4;
>> +            unsigned long gpi:4;
>> +            unsigned long frintts:4;
>> +            unsigned long sb:4;
>> +            unsigned long specres:4;
>> +            unsigned long bf16:4;
>> +            unsigned long dgh:4;
>> +            unsigned long i8mm:4;
>> +            unsigned long __res0:8;
> 
> This unfortunately break the build on arm64 becase __res0 is defined twiced in the structure:
> 
> oss/xen/xen/include/asm/cpufeature.h:251:27: error: duplicate member ‘__res0’
>              unsigned long __res0:8;
>                            ^~~~~~
> 

Sorry about that, I should have double checked that patch still compiles.

> The change is trivial, so I have resolved it (see change below) and committed it:
> 
> diff --git a/xen/include/asm-arm/cpufeature.h b/xen/include/asm-arm/cpufeature.h
> index 2baf7919615d..70cb67301f74 100644
> --- a/xen/include/asm-arm/cpufeature.h
> +++ b/xen/include/asm-arm/cpufeature.h
> @@ -248,7 +248,7 @@ struct cpuinfo_arm {
>              unsigned long bf16:4;
>              unsigned long dgh:4;
>              unsigned long i8mm:4;
> -            unsigned long __res0:8;
> +            unsigned long __res2:8;
>          };
>      } isa64;
> 

LGTM, Great Thanks!

Vladimir

> Cheers,
> 


Re: [XEN PATCH] xen/arm: Hide Pointer Authentication (PAC)
Posted by Julien Grall 3 years, 3 months ago
Hi Vladimir,

On 20/01/2021 11:27, Vladimir Murzin wrote:
> The ARMv8.3 Pointer Authentication extension is not supported by Xen
> at the moment, so do not expose that via ID register.
> 
> Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
> Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>

Reviewed-by: Julien Grall <jgrall@amazon.com>

As I think this one can be considered as a bug fix to the recent series 
from Bertrand. So I will commit it without Ian's RM tag (although he did 
gave it on IRC).

Cheers,

-- 
Julien Grall