]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
x86: Use HAS_CPU_FEATURE with IBT and SHSTK [BZ #26625]
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 16 Sep 2020 12:27:32 +0000 (05:27 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 17 Sep 2020 12:18:36 +0000 (05:18 -0700)
commit 04bba1e5d84b6fd8d3a3b006bc240cd5d241ee30
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Wed Aug 5 13:51:56 2020 -0700

    x86: Set CPU usable feature bits conservatively [BZ #26552]

    Set CPU usable feature bits only for CPU features which are usable in
    user space and whose usability can be detected from user space, excluding
    features like FSGSBASE whose enable bit can only be checked in the kernel.

no longer turns on the usable bits of IBT and SHSTK since we don't know
if IBT and SHSTK are usable until much later.  Use HAS_CPU_FEATURE to
check if the processor supports IBT and SHSTK.

sysdeps/x86/cpu-features.c
sysdeps/x86/dl-cet.c
sysdeps/x86/tst-get-cpu-features.c

index a9945b94bbd6ce60be54a47d9bfc0838687c5dec..6551df19c0e46e955f18ac1cbd7db6714a1156c8 100644 (file)
@@ -723,9 +723,9 @@ no_cpuid:
             GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK
           */
          unsigned int cet_feature = 0;
-         if (!CPU_FEATURE_USABLE (IBT))
+         if (!HAS_CPU_FEATURE (IBT))
            cet_feature |= GNU_PROPERTY_X86_FEATURE_1_IBT;
-         if (!CPU_FEATURE_USABLE (SHSTK))
+         if (!HAS_CPU_FEATURE (SHSTK))
            cet_feature |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
 
          if (cet_feature)
index 03572f7af6ff18d12ef48b263e7f4fb28d0e1cbd..5524b66038767395be70ce893a71fa20f0d2a9c6 100644 (file)
@@ -74,10 +74,10 @@ dl_cet_check (struct link_map *m, const char *program)
 
             GLIBC_TUNABLES=glibc.cpu.hwcaps=-IBT,-SHSTK
           */
-         enable_ibt &= (CPU_FEATURE_USABLE (IBT)
+         enable_ibt &= (HAS_CPU_FEATURE (IBT)
                         && (enable_ibt_type == cet_always_on
                             || (m->l_cet & lc_ibt) != 0));
-         enable_shstk &= (CPU_FEATURE_USABLE (SHSTK)
+         enable_shstk &= (HAS_CPU_FEATURE (SHSTK)
                           && (enable_shstk_type == cet_always_on
                               || (m->l_cet & lc_shstk) != 0));
        }
index a3225a00e68486a42c0af67fb4e3fb6e8a8556d0..d11eac9853b330afc5833d09de36362fa65c8246 100644 (file)
@@ -320,7 +320,6 @@ do_test (void)
   CHECK_CPU_FEATURE_USABLE (OSPKE);
   CHECK_CPU_FEATURE_USABLE (WAITPKG);
   CHECK_CPU_FEATURE_USABLE (AVX512_VBMI2);
-  CHECK_CPU_FEATURE_USABLE (SHSTK);
   CHECK_CPU_FEATURE_USABLE (GFNI);
   CHECK_CPU_FEATURE_USABLE (VAES);
   CHECK_CPU_FEATURE_USABLE (VPCLMULQDQ);
@@ -344,7 +343,6 @@ do_test (void)
   CHECK_CPU_FEATURE_USABLE (HYBRID);
   CHECK_CPU_FEATURE_USABLE (TSXLDTRK);
   CHECK_CPU_FEATURE_USABLE (PCONFIG);
-  CHECK_CPU_FEATURE_USABLE (IBT);
   CHECK_CPU_FEATURE_USABLE (AMX_BF16);
   CHECK_CPU_FEATURE_USABLE (AMX_TILE);
   CHECK_CPU_FEATURE_USABLE (AMX_INT8);