e354a5
commit 94cd37ebb293321115a36a422b091fdb72d2fb08
e354a5
Author: H.J. Lu <hjl.tools@gmail.com>
e354a5
Date:   Wed Sep 16 05:27:32 2020 -0700
e354a5
e354a5
    x86: Use HAS_CPU_FEATURE with IBT and SHSTK [BZ #26625]
e354a5
    
e354a5
    commit 04bba1e5d84b6fd8d3a3b006bc240cd5d241ee30
e354a5
    Author: H.J. Lu <hjl.tools@gmail.com>
e354a5
    Date:   Wed Aug 5 13:51:56 2020 -0700
e354a5
    
e354a5
        x86: Set CPU usable feature bits conservatively [BZ #26552]
e354a5
    
e354a5
        Set CPU usable feature bits only for CPU features which are usable in
e354a5
        user space and whose usability can be detected from user space, excluding
e354a5
        features like FSGSBASE whose enable bit can only be checked in the kernel.
e354a5
    
e354a5
    no longer turns on the usable bits of IBT and SHSTK since we don't know
e354a5
    if IBT and SHSTK are usable until much later.  Use HAS_CPU_FEATURE to
e354a5
    check if the processor supports IBT and SHSTK.
e354a5
e354a5
diff --git a/sysdeps/x86/cpu-features.c b/sysdeps/x86/cpu-features.c
e354a5
index 77a596a15404b575..7f2ff00f2b4b45f2 100644
e354a5
--- a/sysdeps/x86/cpu-features.c
e354a5
+++ b/sysdeps/x86/cpu-features.c
e354a5
@@ -722,9 +722,9 @@ no_cpuid:
e354a5
 	     GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK
e354a5
 	   */
e354a5
 	  unsigned int cet_feature = 0;
e354a5
-	  if (!CPU_FEATURE_USABLE (IBT))
e354a5
+	  if (!HAS_CPU_FEATURE (IBT))
e354a5
 	    cet_feature |= GNU_PROPERTY_X86_FEATURE_1_IBT;
e354a5
-	  if (!CPU_FEATURE_USABLE (SHSTK))
e354a5
+	  if (!HAS_CPU_FEATURE (SHSTK))
e354a5
 	    cet_feature |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
e354a5
 
e354a5
 	  if (cet_feature)
e354a5
diff --git a/sysdeps/x86/dl-cet.c b/sysdeps/x86/dl-cet.c
e354a5
index 11ff0618fae7230f..d481bddc27e5d7cc 100644
e354a5
--- a/sysdeps/x86/dl-cet.c
e354a5
+++ b/sysdeps/x86/dl-cet.c
e354a5
@@ -74,10 +74,10 @@ dl_cet_check (struct link_map *m, const char *program)
e354a5
 
e354a5
 	     GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK
e354a5
 	   */
e354a5
-	  enable_ibt &= (CPU_FEATURE_USABLE (IBT)
e354a5
+	  enable_ibt &= (HAS_CPU_FEATURE (IBT)
e354a5
 			 && (enable_ibt_type == cet_always_on
e354a5
 			     || (m->l_cet & lc_ibt) != 0));
e354a5
-	  enable_shstk &= (CPU_FEATURE_USABLE (SHSTK)
e354a5
+	  enable_shstk &= (HAS_CPU_FEATURE (SHSTK)
e354a5
 			   && (enable_shstk_type == cet_always_on
e354a5
 			       || (m->l_cet & lc_shstk) != 0));
e354a5
 	}
e354a5
diff --git a/sysdeps/x86/tst-get-cpu-features.c b/sysdeps/x86/tst-get-cpu-features.c
e354a5
index c01d701b52090983..3ec94e0c9a191f36 100644
e354a5
--- a/sysdeps/x86/tst-get-cpu-features.c
e354a5
+++ b/sysdeps/x86/tst-get-cpu-features.c
e354a5
@@ -318,7 +318,6 @@ do_test (void)
e354a5
   CHECK_CPU_FEATURE_USABLE (OSPKE);
e354a5
   CHECK_CPU_FEATURE_USABLE (WAITPKG);
e354a5
   CHECK_CPU_FEATURE_USABLE (AVX512_VBMI2);
e354a5
-  CHECK_CPU_FEATURE_USABLE (SHSTK);
e354a5
   CHECK_CPU_FEATURE_USABLE (GFNI);
e354a5
   CHECK_CPU_FEATURE_USABLE (VAES);
e354a5
   CHECK_CPU_FEATURE_USABLE (VPCLMULQDQ);
e354a5
@@ -342,7 +341,6 @@ do_test (void)
e354a5
   CHECK_CPU_FEATURE_USABLE (HYBRID);
e354a5
   CHECK_CPU_FEATURE_USABLE (TSXLDTRK);
e354a5
   CHECK_CPU_FEATURE_USABLE (PCONFIG);
e354a5
-  CHECK_CPU_FEATURE_USABLE (IBT);
e354a5
   CHECK_CPU_FEATURE_USABLE (AMX_BF16);
e354a5
   CHECK_CPU_FEATURE_USABLE (AMX_TILE);
e354a5
   CHECK_CPU_FEATURE_USABLE (AMX_INT8);