diff options
Diffstat (limited to 'arch/i386/mm/fault.c')
-rw-r--r-- | arch/i386/mm/fault.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/i386/mm/fault.c b/arch/i386/mm/fault.c index a509237c4815..8e90339d6eaa 100644 --- a/arch/i386/mm/fault.c +++ b/arch/i386/mm/fault.c | |||
@@ -146,7 +146,7 @@ static int __is_prefetch(struct pt_regs *regs, unsigned long addr) | |||
146 | 146 | ||
147 | if (instr > limit) | 147 | if (instr > limit) |
148 | break; | 148 | break; |
149 | if (__get_user(opcode, (unsigned char *) instr)) | 149 | if (__get_user(opcode, (unsigned char __user *) instr)) |
150 | break; | 150 | break; |
151 | 151 | ||
152 | instr_hi = opcode & 0xf0; | 152 | instr_hi = opcode & 0xf0; |
@@ -173,7 +173,7 @@ static int __is_prefetch(struct pt_regs *regs, unsigned long addr) | |||
173 | scan_more = 0; | 173 | scan_more = 0; |
174 | if (instr > limit) | 174 | if (instr > limit) |
175 | break; | 175 | break; |
176 | if (__get_user(opcode, (unsigned char *) instr)) | 176 | if (__get_user(opcode, (unsigned char __user *) instr)) |
177 | break; | 177 | break; |
178 | prefetch = (instr_lo == 0xF) && | 178 | prefetch = (instr_lo == 0xF) && |
179 | (opcode == 0x0D || opcode == 0x18); | 179 | (opcode == 0x0D || opcode == 0x18); |
@@ -463,6 +463,9 @@ no_context: | |||
463 | printk(KERN_ALERT "*pte = %08lx\n", page); | 463 | printk(KERN_ALERT "*pte = %08lx\n", page); |
464 | } | 464 | } |
465 | #endif | 465 | #endif |
466 | tsk->thread.cr2 = address; | ||
467 | tsk->thread.trap_no = 14; | ||
468 | tsk->thread.error_code = error_code; | ||
466 | die("Oops", regs, error_code); | 469 | die("Oops", regs, error_code); |
467 | bust_spinlocks(0); | 470 | bust_spinlocks(0); |
468 | do_exit(SIGKILL); | 471 | do_exit(SIGKILL); |