void __user *buffer, size_t *lenp, loff_t *ppos);
#endif
-#ifdef CONFIG_X86
-int proc_dointvec_ibrs_ctrl(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos);
-int proc_dointvec_ibpb_ctrl(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos);
-int proc_dointvec_ibrs_dump(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos);
-#endif
-
#ifdef CONFIG_MAGIC_SYSRQ
/* Note: sysrq code uses it's own private copy */
static int __sysrq_enabled = CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE;
int sysctl_legacy_va_layout;
#endif
-u32 sysctl_ibrs_dump = 0;
-u32 sysctl_ibrs_enabled = 0;
-EXPORT_SYMBOL(sysctl_ibrs_enabled);
-u32 sysctl_ibpb_enabled = 0;
-EXPORT_SYMBOL(sysctl_ibpb_enabled);
-
/* The default sysctl tables: */
static struct ctl_table sysctl_base_table[] = {
.extra1 = &zero,
.extra2 = &one,
},
-#endif
-#ifdef CONFIG_X86
- {
- .procname = "ibrs_enabled",
- .data = &sysctl_ibrs_enabled,
- .maxlen = sizeof(unsigned int),
- .mode = 0644,
- .proc_handler = proc_dointvec_ibrs_ctrl,
- .extra1 = &zero,
- .extra2 = &two,
- },
- {
- .procname = "ibpb_enabled",
- .data = &sysctl_ibpb_enabled,
- .maxlen = sizeof(unsigned int),
- .mode = 0644,
- .proc_handler = proc_dointvec_ibpb_ctrl,
- .extra1 = &zero,
- .extra2 = &one,
- },
#endif
{ }
};
}
}
-#ifdef CONFIG_X86
-
-int proc_dointvec_ibrs_ctrl(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
-{
- int ret;
- unsigned int cpu;
-
- ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
- mutex_lock(&spec_ctrl_mutex);
- if (sysctl_ibrs_enabled == 0) {
- /* always set IBRS off */
- set_ibrs_disabled();
- if (ibrs_supported) {
- for_each_online_cpu(cpu)
- wrmsrl_on_cpu(cpu, MSR_IA32_SPEC_CTRL, SPEC_CTRL_FEATURE_DISABLE_IBRS);
- }
- } else if (sysctl_ibrs_enabled == 2) {
- /* always set IBRS on, even in user space */
- clear_ibrs_disabled();
- if (ibrs_supported) {
- for_each_online_cpu(cpu)
- wrmsrl_on_cpu(cpu, MSR_IA32_SPEC_CTRL, SPEC_CTRL_FEATURE_ENABLE_IBRS);
- } else {
- sysctl_ibrs_enabled = 0;
- }
- } else if (sysctl_ibrs_enabled == 1) {
- /* use IBRS in kernel */
- clear_ibrs_disabled();
- if (!ibrs_inuse)
- /* platform don't support ibrs */
- sysctl_ibrs_enabled = 0;
- }
- mutex_unlock(&spec_ctrl_mutex);
- return ret;
-}
-
-int proc_dointvec_ibpb_ctrl(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp, loff_t *ppos)
-{
- int ret;
-
- ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
- mutex_lock(&spec_ctrl_mutex);
- if (sysctl_ibpb_enabled == 0)
- set_ibpb_disabled();
- else if (sysctl_ibpb_enabled == 1) {
- clear_ibpb_disabled();
- if (!ibpb_inuse)
- /* platform don't support ibpb */
- sysctl_ibpb_enabled = 0;
- }
- mutex_unlock(&spec_ctrl_mutex);
- return ret;
-}
-#endif
#else /* CONFIG_PROC_SYSCTL */
int proc_dostring(struct ctl_table *table, int write,