Skip to content

Commit e21d660

Browse files
amlutogregkh
authored andcommitted
x86/fsgsbase/64: Report FSBASE and GSBASE correctly in core dumps
commit 9584d98bed7a7a904d0702ad06bbcc94703cb5b4 upstream. In ELF_COPY_CORE_REGS, we're copying from the current task, so accessing thread.fsbase and thread.gsbase makes no sense. Just read the values from the CPU registers. In practice, the old code would have been correct most of the time simply because thread.fsbase and thread.gsbase usually matched the CPU registers. 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: Chang Seok <chang.seok.bae@intel.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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 53e5f7b commit e21d660

1 file changed

Lines changed: 3 additions & 2 deletions

File tree

  • arch/x86/include/asm

arch/x86/include/asm/elf.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ void set_personality_ia32(bool);
204204

205205
#define ELF_CORE_COPY_REGS(pr_reg, regs) \
206206
do { \
207+
unsigned long base; \
207208
unsigned v; \
208209
(pr_reg)[0] = (regs)->r15; \
209210
(pr_reg)[1] = (regs)->r14; \
@@ -226,8 +227,8 @@ do { \
226227
(pr_reg)[18] = (regs)->flags; \
227228
(pr_reg)[19] = (regs)->sp; \
228229
(pr_reg)[20] = (regs)->ss; \
229-
(pr_reg)[21] = current->thread.fs; \
230-
(pr_reg)[22] = current->thread.gs; \
230+
rdmsrl(MSR_FS_BASE, base); (pr_reg)[21] = base; \
231+
rdmsrl(MSR_KERNEL_GS_BASE, base); (pr_reg)[22] = base; \
231232
asm("movl %%ds,%0" : "=r" (v)); (pr_reg)[23] = v; \
232233
asm("movl %%es,%0" : "=r" (v)); (pr_reg)[24] = v; \
233234
asm("movl %%fs,%0" : "=r" (v)); (pr_reg)[25] = v; \

0 commit comments

Comments
 (0)