forked from luck/tmp_suning_uos_patched
e6401c1309
Currently, the IRQ stack is hardcoded as the first page of the percpu area, and the stack canary lives on the IRQ stack. The former gets in the way of adding an IRQ stack guard page, and the latter is a potential weakness in the stack canary mechanism. Split the IRQ stack into its own private percpu pages. [ tglx: Make 64 and 32 bit share struct irq_stack ] Signed-off-by: Andy Lutomirski <luto@kernel.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Borislav Petkov <bp@suse.de> Cc: Alexey Dobriyan <adobriyan@gmail.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com> Cc: Brijesh Singh <brijesh.singh@amd.com> Cc: "Chang S. Bae" <chang.seok.bae@intel.com> Cc: Dominik Brodowski <linux@dominikbrodowski.net> Cc: Feng Tang <feng.tang@intel.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jan Beulich <JBeulich@suse.com> Cc: Jiri Kosina <jkosina@suse.cz> Cc: Joerg Roedel <jroedel@suse.de> Cc: Jordan Borgner <mail@jordan-borgner.de> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Juergen Gross <jgross@suse.com> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Cc: Maran Wilson <maran.wilson@oracle.com> Cc: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Rapoport <rppt@linux.vnet.ibm.com> Cc: Nick Desaulniers <ndesaulniers@google.com> Cc: Nicolai Stange <nstange@suse.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Pu Wen <puwen@hygon.cn> Cc: "Rafael Ávila de Espíndola" <rafael@espindo.la> Cc: Sean Christopherson <sean.j.christopherson@intel.com> Cc: Stefano Stabellini <sstabellini@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: x86-ml <x86@kernel.org> Cc: xen-devel@lists.xenproject.org Link: https://lkml.kernel.org/r/20190414160146.267376656@linutronix.de
88 lines
1.9 KiB
C
88 lines
1.9 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
#ifndef __LINUX_KBUILD_H
|
|
# error "Please do not build this file directly, build asm-offsets.c instead"
|
|
#endif
|
|
|
|
#include <asm/ia32.h>
|
|
|
|
#define __SYSCALL_64(nr, sym, qual) [nr] = 1,
|
|
static char syscalls_64[] = {
|
|
#include <asm/syscalls_64.h>
|
|
};
|
|
#define __SYSCALL_I386(nr, sym, qual) [nr] = 1,
|
|
static char syscalls_ia32[] = {
|
|
#include <asm/syscalls_32.h>
|
|
};
|
|
|
|
#if defined(CONFIG_KVM_GUEST) && defined(CONFIG_PARAVIRT_SPINLOCKS)
|
|
#include <asm/kvm_para.h>
|
|
#endif
|
|
|
|
int main(void)
|
|
{
|
|
#ifdef CONFIG_PARAVIRT
|
|
#ifdef CONFIG_PARAVIRT_XXL
|
|
OFFSET(PV_CPU_usergs_sysret64, paravirt_patch_template,
|
|
cpu.usergs_sysret64);
|
|
OFFSET(PV_CPU_swapgs, paravirt_patch_template, cpu.swapgs);
|
|
#ifdef CONFIG_DEBUG_ENTRY
|
|
OFFSET(PV_IRQ_save_fl, paravirt_patch_template, irq.save_fl);
|
|
#endif
|
|
#endif
|
|
BLANK();
|
|
#endif
|
|
|
|
#if defined(CONFIG_KVM_GUEST) && defined(CONFIG_PARAVIRT_SPINLOCKS)
|
|
OFFSET(KVM_STEAL_TIME_preempted, kvm_steal_time, preempted);
|
|
BLANK();
|
|
#endif
|
|
|
|
#define ENTRY(entry) OFFSET(pt_regs_ ## entry, pt_regs, entry)
|
|
ENTRY(bx);
|
|
ENTRY(cx);
|
|
ENTRY(dx);
|
|
ENTRY(sp);
|
|
ENTRY(bp);
|
|
ENTRY(si);
|
|
ENTRY(di);
|
|
ENTRY(r8);
|
|
ENTRY(r9);
|
|
ENTRY(r10);
|
|
ENTRY(r11);
|
|
ENTRY(r12);
|
|
ENTRY(r13);
|
|
ENTRY(r14);
|
|
ENTRY(r15);
|
|
ENTRY(flags);
|
|
BLANK();
|
|
#undef ENTRY
|
|
|
|
#define ENTRY(entry) OFFSET(saved_context_ ## entry, saved_context, entry)
|
|
ENTRY(cr0);
|
|
ENTRY(cr2);
|
|
ENTRY(cr3);
|
|
ENTRY(cr4);
|
|
ENTRY(cr8);
|
|
ENTRY(gdt_desc);
|
|
BLANK();
|
|
#undef ENTRY
|
|
|
|
OFFSET(TSS_ist, tss_struct, x86_tss.ist);
|
|
DEFINE(DB_STACK_OFFSET, offsetof(struct cea_exception_stacks, DB_stack) -
|
|
offsetof(struct cea_exception_stacks, DB1_stack));
|
|
BLANK();
|
|
|
|
#ifdef CONFIG_STACKPROTECTOR
|
|
DEFINE(stack_canary_offset, offsetof(struct fixed_percpu_data, stack_canary));
|
|
BLANK();
|
|
#endif
|
|
|
|
DEFINE(__NR_syscall_max, sizeof(syscalls_64) - 1);
|
|
DEFINE(NR_syscalls, sizeof(syscalls_64));
|
|
|
|
DEFINE(__NR_syscall_compat_max, sizeof(syscalls_ia32) - 1);
|
|
DEFINE(IA32_NR_syscalls, sizeof(syscalls_ia32));
|
|
|
|
return 0;
|
|
}
|