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