Skip to content

Commit 238c911

Browse files
offlinemarksuryasaimadhu
authored andcommitted
x86/dumpstack: Fix misleading instruction pointer error message
Printing "Bad RIP value" if copy_code() fails can be misleading for userspace pointers, since copy_code() can fail if the instruction pointer is valid but the code is paged out. This is because copy_code() calls copy_from_user_nmi() for userspace pointers, which disables page fault handling. This is reproducible in OOM situations, where it's plausible that the code may be reclaimed in the time between entry into the kernel and when this message is printed. This leaves a misleading log in dmesg that suggests instruction pointer corruption has occurred, which may alarm users. Change the message to state the error condition more precisely. [ bp: Massage a bit. ] Signed-off-by: Mark Mossberg <mark.mossberg@gmail.com> Signed-off-by: Borislav Petkov <bp@suse.de> Link: https://lkml.kernel.org/r/20201002042915.403558-1-mark.mossberg@gmail.com
1 parent a1b8638 commit 238c911

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

arch/x86/kernel/dumpstack.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ void show_opcodes(struct pt_regs *regs, const char *loglvl)
115115
unsigned long prologue = regs->ip - PROLOGUE_SIZE;
116116

117117
if (copy_code(regs, opcodes, prologue, sizeof(opcodes))) {
118-
printk("%sCode: Bad RIP value.\n", loglvl);
118+
printk("%sCode: Unable to access opcode bytes at RIP 0x%lx.\n",
119+
loglvl, prologue);
119120
} else {
120121
printk("%sCode: %" __stringify(PROLOGUE_SIZE) "ph <%02x> %"
121122
__stringify(EPILOGUE_SIZE) "ph\n", loglvl, opcodes,

0 commit comments

Comments
 (0)