summaryrefslogtreecommitdiff
path: root/sysdeps/x86/cpu-tunables.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/x86/cpu-tunables.c')
-rw-r--r--sysdeps/x86/cpu-tunables.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/sysdeps/x86/cpu-tunables.c b/sysdeps/x86/cpu-tunables.c
index af761dcbbc..69155a8f44 100644
--- a/sysdeps/x86/cpu-tunables.c
+++ b/sysdeps/x86/cpu-tunables.c
@@ -334,4 +334,52 @@ TUNABLE_CALLBACK (set_hwcaps) (tunable_val_t *valp)
}
while (*p != '\0');
}
+
+# if CET_ENABLED
+# include <cet-tunables.h>
+
+attribute_hidden
+void
+TUNABLE_CALLBACK (set_x86_ibt) (tunable_val_t *valp)
+{
+ if (DEFAULT_MEMCMP (valp->strval, "on", sizeof ("on")) == 0)
+ {
+ GL(dl_x86_feature_1)[1] &= ~((1 << CET_MAX) - 1);
+ GL(dl_x86_feature_1)[1] |= CET_ALWAYS_ON;
+ }
+ else if (DEFAULT_MEMCMP (valp->strval, "off", sizeof ("off")) == 0)
+ {
+ GL(dl_x86_feature_1)[1] &= ~((1 << CET_MAX) - 1);
+ GL(dl_x86_feature_1)[1] |= CET_ALWAYS_OFF;
+ }
+ else if (DEFAULT_MEMCMP (valp->strval, "permissive",
+ sizeof ("permissive")) == 0)
+ {
+ GL(dl_x86_feature_1)[1] &= ~((1 << CET_MAX) - 1);
+ GL(dl_x86_feature_1)[1] |= CET_PERMISSIVE;
+ }
+}
+
+attribute_hidden
+void
+TUNABLE_CALLBACK (set_x86_shstk) (tunable_val_t *valp)
+{
+ if (DEFAULT_MEMCMP (valp->strval, "on", sizeof ("on")) == 0)
+ {
+ GL(dl_x86_feature_1)[1] &= ~(((1 << CET_MAX) - 1) << CET_MAX);
+ GL(dl_x86_feature_1)[1] |= (CET_ALWAYS_ON << CET_MAX);
+ }
+ else if (DEFAULT_MEMCMP (valp->strval, "off", sizeof ("off")) == 0)
+ {
+ GL(dl_x86_feature_1)[1] &= ~(((1 << CET_MAX) - 1) << CET_MAX);
+ GL(dl_x86_feature_1)[1] |= (CET_ALWAYS_OFF << CET_MAX);
+ }
+ else if (DEFAULT_MEMCMP (valp->strval, "permissive",
+ sizeof ("permissive")) == 0)
+ {
+ GL(dl_x86_feature_1)[1] &= ~(((1 << CET_MAX) - 1) << CET_MAX);
+ GL(dl_x86_feature_1)[1] |= (CET_PERMISSIVE << CET_MAX);
+ }
+}
+# endif
#endif