mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 21:40:54 +07:00
x86/asm/32: Remove a bunch of '& 0xffff' from pt_regs segment reads
Now that pt_regs properly defines segment fields as 16-bit on 32-bit CPUs, there's no need to mask off the high word. Signed-off-by: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Borislav Petkov <bpetkov@suse.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
630c1863bc
commit
99504819fc
@ -226,7 +226,7 @@ static void __user *get_sigframe(struct ksignal *ksig, struct pt_regs *regs,
|
|||||||
if (ksig->ka.sa.sa_flags & SA_ONSTACK)
|
if (ksig->ka.sa.sa_flags & SA_ONSTACK)
|
||||||
sp = sigsp(sp, ksig);
|
sp = sigsp(sp, ksig);
|
||||||
/* This is the legacy signal stack switching. */
|
/* This is the legacy signal stack switching. */
|
||||||
else if ((regs->ss & 0xffff) != __USER32_DS &&
|
else if (regs->ss != __USER32_DS &&
|
||||||
!(ksig->ka.sa.sa_flags & SA_RESTORER) &&
|
!(ksig->ka.sa.sa_flags & SA_RESTORER) &&
|
||||||
ksig->ka.sa.sa_restorer)
|
ksig->ka.sa.sa_restorer)
|
||||||
sp = (unsigned long) ksig->ka.sa.sa_restorer;
|
sp = (unsigned long) ksig->ka.sa.sa_restorer;
|
||||||
|
@ -126,15 +126,15 @@ do { \
|
|||||||
pr_reg[4] = regs->di; \
|
pr_reg[4] = regs->di; \
|
||||||
pr_reg[5] = regs->bp; \
|
pr_reg[5] = regs->bp; \
|
||||||
pr_reg[6] = regs->ax; \
|
pr_reg[6] = regs->ax; \
|
||||||
pr_reg[7] = regs->ds & 0xffff; \
|
pr_reg[7] = regs->ds; \
|
||||||
pr_reg[8] = regs->es & 0xffff; \
|
pr_reg[8] = regs->es; \
|
||||||
pr_reg[9] = regs->fs & 0xffff; \
|
pr_reg[9] = regs->fs; \
|
||||||
pr_reg[11] = regs->orig_ax; \
|
pr_reg[11] = regs->orig_ax; \
|
||||||
pr_reg[12] = regs->ip; \
|
pr_reg[12] = regs->ip; \
|
||||||
pr_reg[13] = regs->cs & 0xffff; \
|
pr_reg[13] = regs->cs; \
|
||||||
pr_reg[14] = regs->flags; \
|
pr_reg[14] = regs->flags; \
|
||||||
pr_reg[15] = regs->sp; \
|
pr_reg[15] = regs->sp; \
|
||||||
pr_reg[16] = regs->ss & 0xffff; \
|
pr_reg[16] = regs->ss; \
|
||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
#define ELF_CORE_COPY_REGS(pr_reg, regs) \
|
#define ELF_CORE_COPY_REGS(pr_reg, regs) \
|
||||||
|
@ -267,7 +267,7 @@ int __die(const char *str, struct pt_regs *regs, long err)
|
|||||||
#ifdef CONFIG_X86_32
|
#ifdef CONFIG_X86_32
|
||||||
if (user_mode(regs)) {
|
if (user_mode(regs)) {
|
||||||
sp = regs->sp;
|
sp = regs->sp;
|
||||||
ss = regs->ss & 0xffff;
|
ss = regs->ss;
|
||||||
} else {
|
} else {
|
||||||
sp = kernel_stack_pointer(regs);
|
sp = kernel_stack_pointer(regs);
|
||||||
savesegment(ss, ss);
|
savesegment(ss, ss);
|
||||||
|
@ -68,7 +68,7 @@ void __show_regs(struct pt_regs *regs, int all)
|
|||||||
|
|
||||||
if (user_mode(regs)) {
|
if (user_mode(regs)) {
|
||||||
sp = regs->sp;
|
sp = regs->sp;
|
||||||
ss = regs->ss & 0xffff;
|
ss = regs->ss;
|
||||||
gs = get_user_gs(regs);
|
gs = get_user_gs(regs);
|
||||||
} else {
|
} else {
|
||||||
sp = kernel_stack_pointer(regs);
|
sp = kernel_stack_pointer(regs);
|
||||||
|
@ -69,8 +69,7 @@ void __show_regs(struct pt_regs *regs, int all)
|
|||||||
unsigned int fsindex, gsindex;
|
unsigned int fsindex, gsindex;
|
||||||
unsigned int ds, cs, es;
|
unsigned int ds, cs, es;
|
||||||
|
|
||||||
printk(KERN_DEFAULT "RIP: %04lx:%pS\n", regs->cs & 0xffff,
|
printk(KERN_DEFAULT "RIP: %04lx:%pS\n", regs->cs, (void *)regs->ip);
|
||||||
(void *)regs->ip);
|
|
||||||
printk(KERN_DEFAULT "RSP: %04lx:%016lx EFLAGS: %08lx", regs->ss,
|
printk(KERN_DEFAULT "RSP: %04lx:%016lx EFLAGS: %08lx", regs->ss,
|
||||||
regs->sp, regs->flags);
|
regs->sp, regs->flags);
|
||||||
if (regs->orig_ax != -1)
|
if (regs->orig_ax != -1)
|
||||||
|
@ -256,7 +256,7 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size,
|
|||||||
sp = current->sas_ss_sp + current->sas_ss_size;
|
sp = current->sas_ss_sp + current->sas_ss_size;
|
||||||
} else if (IS_ENABLED(CONFIG_X86_32) &&
|
} else if (IS_ENABLED(CONFIG_X86_32) &&
|
||||||
!onsigstack &&
|
!onsigstack &&
|
||||||
(regs->ss & 0xffff) != __USER_DS &&
|
regs->ss != __USER_DS &&
|
||||||
!(ka->sa.sa_flags & SA_RESTORER) &&
|
!(ka->sa.sa_flags & SA_RESTORER) &&
|
||||||
ka->sa.sa_restorer) {
|
ka->sa.sa_restorer) {
|
||||||
/* This is the legacy signal stack switching. */
|
/* This is the legacy signal stack switching. */
|
||||||
|
@ -13,7 +13,7 @@ unsigned long convert_ip_to_linear(struct task_struct *child, struct pt_regs *re
|
|||||||
unsigned long addr, seg;
|
unsigned long addr, seg;
|
||||||
|
|
||||||
addr = regs->ip;
|
addr = regs->ip;
|
||||||
seg = regs->cs & 0xffff;
|
seg = regs->cs;
|
||||||
if (v8086_mode(regs)) {
|
if (v8086_mode(regs)) {
|
||||||
addr = (addr & 0xffff) + (seg << 4);
|
addr = (addr & 0xffff) + (seg << 4);
|
||||||
return addr;
|
return addr;
|
||||||
|
@ -142,7 +142,7 @@ void __init early_fixup_exception(struct pt_regs *regs, int trapnr)
|
|||||||
* undefined. I'm not sure which CPUs do this, but at least
|
* undefined. I'm not sure which CPUs do this, but at least
|
||||||
* the 486 DX works this way.
|
* the 486 DX works this way.
|
||||||
*/
|
*/
|
||||||
if ((regs->cs & 0xFFFF) != __KERNEL_CS)
|
if (regs->cs != __KERNEL_CS)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user