kernel_samsung_a53x/arch/x86/kernel
Andy Lutomirski e8ca71be6c x86/stackprotector/32: Make the canary into a regular percpu variable
[ Upstream commit 3fb0fdb3bbe7aed495109b3296b06c2409734023 ]

On 32-bit kernels, the stackprotector canary is quite nasty -- it is
stored at %gs:(20), which is nasty because 32-bit kernels use %fs for
percpu storage.  It's even nastier because it means that whether %gs
contains userspace state or kernel state while running kernel code
depends on whether stackprotector is enabled (this is
CONFIG_X86_32_LAZY_GS), and this setting radically changes the way
that segment selectors work.  Supporting both variants is a
maintenance and testing mess.

Merely rearranging so that percpu and the stack canary
share the same segment would be messy as the 32-bit percpu address
layout isn't currently compatible with putting a variable at a fixed
offset.

Fortunately, GCC 8.1 added options that allow the stack canary to be
accessed as %fs:__stack_chk_guard, effectively turning it into an ordinary
percpu variable.  This lets us get rid of all of the code to manage the
stack canary GDT descriptor and the CONFIG_X86_32_LAZY_GS mess.

(That name is special.  We could use any symbol we want for the
 %fs-relative mode, but for CONFIG_SMP=n, gcc refuses to let us use any
 name other than __stack_chk_guard.)

Forcibly disable stackprotector on older compilers that don't support
the new options and turn the stack canary into a percpu variable. The
"lazy GS" approach is now used for all 32-bit configurations.

Also makes load_gs_index() work on 32-bit kernels. On 64-bit kernels,
it loads the GS selector and updates the user GSBASE accordingly. (This
is unchanged.) On 32-bit kernels, it loads the GS selector and updates
GSBASE, which is now always the user base. This means that the overall
effect is the same on 32-bit and 64-bit, which avoids some ifdeffery.

 [ bp: Massage commit message. ]

Signed-off-by: Andy Lutomirski <luto@kernel.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lkml.kernel.org/r/c0ff7dba14041c7e5d1cae5d4df052f03759bef3.1613243844.git.luto@kernel.org
Stable-dep-of: e3f269ed0acc ("x86/pm: Work around false positive kmemleak report in msr_build_context()")
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-11-19 09:22:37 +01:00
..
acpi x86/i8259: Skip probing when ACPI/MADT advertises PCAT compatibility 2024-11-18 10:58:32 +01:00
apic Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cpu x86/stackprotector/32: Make the canary into a regular percpu variable 2024-11-19 09:22:37 +01:00
fpu Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kprobes x86/kprobes: fix incorrect return address calculation in kprobe_emulate_call_indirect 2024-11-18 12:12:08 +01:00
alternative.c x86/alternative: Make custom return thunk unconditional 2024-11-18 22:25:38 +01:00
amd_gart_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
amd_nb.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
apb_timer.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
aperture_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
apm_32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
asm-offsets.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
asm-offsets_32.c x86/stackprotector/32: Make the canary into a regular percpu variable 2024-11-19 09:22:37 +01:00
asm-offsets_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
audit_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
bootflag.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cc_platform.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
check.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cpuid.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
crash.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
crash_core_32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
crash_core_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
crash_dump_32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
crash_dump_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
devicetree.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
doublefault_32.c x86/stackprotector/32: Make the canary into a regular percpu variable 2024-11-19 09:22:37 +01:00
dumpstack.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dumpstack_32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dumpstack_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
e820.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
early-quirks.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
early_printk.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ebda.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
eisa.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
espfix_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ftrace.c x86/returnthunk: Allow different return thunks 2024-11-18 22:25:38 +01:00
ftrace_32.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ftrace_64.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
head32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
head64.c x86/boot: Fix incorrect startup_gdt_descr.size 2024-11-18 11:42:47 +01:00
head_32.S x86/stackprotector/32: Make the canary into a regular percpu variable 2024-11-19 09:22:37 +01:00
head_64.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
hpet.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
hw_breakpoint.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i8237.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i8253.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
i8259.c x86/i8259: Skip probing when ACPI/MADT advertises PCAT compatibility 2024-11-18 10:58:32 +01:00
idt.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ima_arch.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
io_delay.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ioport.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq_32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irq_work.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irqflags.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
irqinit.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
itmt.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jailhouse.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jump_label.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kdebugfs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kexec-bzimage64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kgdb.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ksysfs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kvm.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kvmclock.c x86/kvm: Do not try to disable kvmclock if it was not enabled 2024-11-18 12:12:48 +01:00
ldt.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
machine_kexec_32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
machine_kexec_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mmconf-fam10h_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
module.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mpparse.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
msr.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
nmi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
nmi_selftest.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
paravirt-spinlocks.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
paravirt.c x86/paravirt: Fix build due to __text_gen_insn() backport 2024-11-19 08:44:37 +01:00
paravirt_patch.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pci-dma.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pci-iommu_table.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pci-swiotlb.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pcspeaker.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
perf_regs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
platform-quirks.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pmem.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
probe_roms.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
process.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
process.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
process_32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
process_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ptrace.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pvclock.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
quirks.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
reboot.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
reboot_fixups_32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
relocate_kernel_32.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
relocate_kernel_64.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
resource.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
rtc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
setup.c x86/mm: Fix RESERVE_BRK() for older binutils 2024-11-18 10:58:45 +01:00
setup_percpu.c x86/stackprotector/32: Make the canary into a regular percpu variable 2024-11-19 09:22:37 +01:00
sev-es-shared.c x86/sev: Check for user-space IOIO pointing to kernel space 2024-11-08 11:26:09 +01:00
sev-es.c x86/sev: Check IOBM for IOIO exceptions from user-space 2024-11-08 11:26:09 +01:00
sev_verify_cbit.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
signal.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
signal_compat.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
smp.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
smpboot.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
stacktrace.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
static_call.c x86/returnthunk: Allow different return thunks 2024-11-18 22:25:38 +01:00
step.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sys_ia32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sys_x86_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sysfb.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sysfb_efi.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sysfb_simplefb.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tboot.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
time.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tls.c x86/stackprotector/32: Make the canary into a regular percpu variable 2024-11-19 09:22:37 +01:00
tls.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
topology.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
trace_clock.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tracepoint.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
traps.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tsc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tsc_msr.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tsc_sync.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
umip.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
unwind_frame.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
unwind_guess.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
unwind_orc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
uprobes.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
verify_cpu.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
vm86_32.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
vmlinux.lds.S x86: Fix .brk attribute in linker script 2024-11-18 10:58:46 +01:00
vsmp_64.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
x86_init.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00