From 132ba6e1daf5463975467cf3af5ec0f0602d96e9 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Sat, 30 Jan 2021 05:44:40 -0800
Subject: [PATCH] x86: Check SSBD and STIBP only on Intel CPUs
Since /proc/cpuinfo reports different SSBD and STIBP on AMD CPUs, check
SSBD and STIBP only on Intel CPUs. Also /proc/cpuinfo doesn't report
IBRS_IBPB.
---
sysdeps/x86/tst-cpu-features-cpuinfo.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
@@ -16,7 +16,7 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
-#include <sys/platform/x86.h>
+#include <cpu-features.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -99,6 +99,7 @@ static int
do_test (int argc, char **argv)
{
int fails = 0;
+ const struct cpu_features *cpu_features = __get_cpu_features ();
get_cpuinfo ();
fails += CHECK_PROC (acpi, ACPI);
@@ -159,7 +160,10 @@ do_test (int argc, char **argv)
fails += CHECK_PROC (hle, HLE);
fails += CHECK_PROC (ht, HTT);
fails += CHECK_PROC (hybrid, HYBRID);
- fails += CHECK_PROC (ibrs, IBRS_IBPB);
+#if 0
+ /* NB: /proc/cpuinfo doesn't report this feature. */
+ fails += CHECK_PROC (ibrs_ibpb, IBRS_IBPB);
+#endif
fails += CHECK_PROC (ibt, IBT);
fails += CHECK_PROC (invariant_tsc, INVARIANT_TSC);
fails += CHECK_PROC (invpcid, INVPCID);
@@ -220,7 +224,9 @@ do_test (int argc, char **argv)
fails += CHECK_PROC (smep, SMEP);
fails += CHECK_PROC (smx, SMX);
fails += CHECK_PROC (ss, SS);
- fails += CHECK_PROC (ssbd, SSBD);
+ /* NB: /proc/cpuinfo reports different SSBD on AMD CPUs. */
+ if (cpu_features->basic.kind == arch_kind_intel)
+ fails += CHECK_PROC (ssbd, SSBD);
fails += CHECK_PROC (sse, SSE);
fails += CHECK_PROC (sse2, SSE2);
fails += CHECK_PROC (pni, SSE3);
@@ -228,7 +234,9 @@ do_test (int argc, char **argv)
fails += CHECK_PROC (sse4_2, SSE4_2);
fails += CHECK_PROC (sse4a, SSE4A);
fails += CHECK_PROC (ssse3, SSSE3);
- fails += CHECK_PROC (stibp, STIBP);
+ /* NB: /proc/cpuinfo reports different STIBP on AMD CPUs. */
+ if (cpu_features->basic.kind == arch_kind_intel)
+ fails += CHECK_PROC (stibp, STIBP);
fails += CHECK_PROC (svm, SVM);
#ifdef __x86_64__
/* NB: SYSCALL_SYSRET is 64-bit only. */
--
2.29.2