Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 fixes from Thomas Gleixner: "Misc fixes: - gold linker build fix - noxsave command line parsing fix - bugfix for NX setup - microcode resume path bug fix - _TIF_NOHZ versus TIF_NOHZ bugfix as discussed in the mysterious lockup thread" * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86, syscall: Fix _TIF_NOHZ handling in syscall_trace_enter_phase1 x86, kaslr: Handle Gold linker for finding bss/brk x86, mm: Set NX across entire PMD at boot x86, microcode: Update BSPs microcode on resume x86: Require exact match for 'noxsave' command line option
This commit is contained in:
commit
c6c9161d06
@ -146,6 +146,8 @@ EXPORT_PER_CPU_SYMBOL_GPL(gdt_page);
|
|||||||
|
|
||||||
static int __init x86_xsave_setup(char *s)
|
static int __init x86_xsave_setup(char *s)
|
||||||
{
|
{
|
||||||
|
if (strlen(s))
|
||||||
|
return 0;
|
||||||
setup_clear_cpu_cap(X86_FEATURE_XSAVE);
|
setup_clear_cpu_cap(X86_FEATURE_XSAVE);
|
||||||
setup_clear_cpu_cap(X86_FEATURE_XSAVEOPT);
|
setup_clear_cpu_cap(X86_FEATURE_XSAVEOPT);
|
||||||
setup_clear_cpu_cap(X86_FEATURE_XSAVES);
|
setup_clear_cpu_cap(X86_FEATURE_XSAVES);
|
||||||
|
@ -465,6 +465,14 @@ static void mc_bp_resume(void)
|
|||||||
|
|
||||||
if (uci->valid && uci->mc)
|
if (uci->valid && uci->mc)
|
||||||
microcode_ops->apply_microcode(cpu);
|
microcode_ops->apply_microcode(cpu);
|
||||||
|
else if (!uci->mc)
|
||||||
|
/*
|
||||||
|
* We might resume and not have applied late microcode but still
|
||||||
|
* have a newer patch stashed from the early loader. We don't
|
||||||
|
* have it in uci->mc so we have to load it the same way we're
|
||||||
|
* applying patches early on the APs.
|
||||||
|
*/
|
||||||
|
load_ucode_ap();
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct syscore_ops mc_syscore_ops = {
|
static struct syscore_ops mc_syscore_ops = {
|
||||||
|
@ -1484,7 +1484,7 @@ unsigned long syscall_trace_enter_phase1(struct pt_regs *regs, u32 arch)
|
|||||||
*/
|
*/
|
||||||
if (work & _TIF_NOHZ) {
|
if (work & _TIF_NOHZ) {
|
||||||
user_exit();
|
user_exit();
|
||||||
work &= ~TIF_NOHZ;
|
work &= ~_TIF_NOHZ;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SECCOMP
|
#ifdef CONFIG_SECCOMP
|
||||||
|
@ -1123,7 +1123,7 @@ void mark_rodata_ro(void)
|
|||||||
unsigned long end = (unsigned long) &__end_rodata_hpage_align;
|
unsigned long end = (unsigned long) &__end_rodata_hpage_align;
|
||||||
unsigned long text_end = PFN_ALIGN(&__stop___ex_table);
|
unsigned long text_end = PFN_ALIGN(&__stop___ex_table);
|
||||||
unsigned long rodata_end = PFN_ALIGN(&__end_rodata);
|
unsigned long rodata_end = PFN_ALIGN(&__end_rodata);
|
||||||
unsigned long all_end = PFN_ALIGN(&_end);
|
unsigned long all_end;
|
||||||
|
|
||||||
printk(KERN_INFO "Write protecting the kernel read-only data: %luk\n",
|
printk(KERN_INFO "Write protecting the kernel read-only data: %luk\n",
|
||||||
(end - start) >> 10);
|
(end - start) >> 10);
|
||||||
@ -1134,7 +1134,16 @@ void mark_rodata_ro(void)
|
|||||||
/*
|
/*
|
||||||
* The rodata/data/bss/brk section (but not the kernel text!)
|
* The rodata/data/bss/brk section (but not the kernel text!)
|
||||||
* should also be not-executable.
|
* should also be not-executable.
|
||||||
|
*
|
||||||
|
* We align all_end to PMD_SIZE because the existing mapping
|
||||||
|
* is a full PMD. If we would align _brk_end to PAGE_SIZE we
|
||||||
|
* split the PMD and the reminder between _brk_end and the end
|
||||||
|
* of the PMD will remain mapped executable.
|
||||||
|
*
|
||||||
|
* Any PMD which was setup after the one which covers _brk_end
|
||||||
|
* has been zapped already via cleanup_highmem().
|
||||||
*/
|
*/
|
||||||
|
all_end = roundup((unsigned long)_brk_end, PMD_SIZE);
|
||||||
set_memory_nx(rodata_start, (all_end - rodata_start) >> PAGE_SHIFT);
|
set_memory_nx(rodata_start, (all_end - rodata_start) >> PAGE_SHIFT);
|
||||||
|
|
||||||
rodata_test();
|
rodata_test();
|
||||||
|
@ -19,7 +19,16 @@ while (<>) {
|
|||||||
if ($file_offset == 0) {
|
if ($file_offset == 0) {
|
||||||
$file_offset = $offset;
|
$file_offset = $offset;
|
||||||
} elsif ($file_offset != $offset) {
|
} elsif ($file_offset != $offset) {
|
||||||
die ".bss and .brk lack common file offset\n";
|
# BFD linker shows the same file offset in ELF.
|
||||||
|
# Gold linker shows them as consecutive.
|
||||||
|
next if ($file_offset + $mem_size == $offset + $size);
|
||||||
|
|
||||||
|
printf STDERR "file_offset: 0x%lx\n", $file_offset;
|
||||||
|
printf STDERR "mem_size: 0x%lx\n", $mem_size;
|
||||||
|
printf STDERR "offset: 0x%lx\n", $offset;
|
||||||
|
printf STDERR "size: 0x%lx\n", $size;
|
||||||
|
|
||||||
|
die ".bss and .brk are non-contiguous\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user