[PATCH] uml: use correct register file size everywhere
This patch uses MAX_REG_NR consistently to refer to the register file size. FRAME_SIZE isn't sufficient because on x86_64, it is smaller than the ptrace register file size. MAX_REG_NR was introduced as a consistent way to get the number of registers, but wasn't used everywhere it should be. When this causes a problem, it makes PTRACE_SETREGS fail on x86_64 because of a corrupted segment register value in the known-good register file. The patch also adds a register dump at that point in case there are any future problems here. Signed-off-by: Jeff Dike <jdike@linux.intel.com> Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> Cc: <stable@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
7632fc8f80
commit
b92c4f922b
@@ -48,7 +48,7 @@ int multi_op_count = 0;
|
||||
static inline long do_syscall_stub(struct mm_id * mm_idp, void **addr)
|
||||
{
|
||||
unsigned long regs[MAX_REG_NR];
|
||||
int n;
|
||||
int n, i;
|
||||
long ret, offset;
|
||||
unsigned long * data;
|
||||
unsigned long * syscall;
|
||||
@@ -66,9 +66,13 @@ static inline long do_syscall_stub(struct mm_id * mm_idp, void **addr)
|
||||
(unsigned long) &__syscall_stub_start);
|
||||
|
||||
n = ptrace_setregs(pid, regs);
|
||||
if(n < 0)
|
||||
if(n < 0){
|
||||
printk("Registers - \n");
|
||||
for(i = 0; i < MAX_REG_NR; i++)
|
||||
printk("\t%d\t0x%lx\n", i, regs[i]);
|
||||
panic("do_syscall_stub : PTRACE_SETREGS failed, errno = %d\n",
|
||||
n);
|
||||
-n);
|
||||
}
|
||||
|
||||
wait_stub_done(pid, 0, "do_syscall_stub");
|
||||
|
||||
|
Reference in New Issue
Block a user