浏览代码

microblaze: Fix do_page_fault for no context

Calling fixup when we are in kernel mode. This
prevent fault for copy_to/from_user. This fault
was find thanks to writev01/03/04 LTP tests.

Signed-off-by: Michal Simek <monstr@monstr.eu>
Michal Simek 16 年之前
父节点
当前提交
f10eca6e10
共有 1 个文件被更改,包括 4 次插入9 次删除
  1. 4 9
      arch/microblaze/mm/fault.c

+ 4 - 9
arch/microblaze/mm/fault.c

@@ -122,15 +122,10 @@ void do_page_fault(struct pt_regs *regs, unsigned long address,
 	}
 	}
 #endif /* CONFIG_KGDB */
 #endif /* CONFIG_KGDB */
 
 
-	if (in_atomic() || mm == NULL) {
-		/* FIXME */
-		if (kernel_mode(regs)) {
-			printk(KERN_EMERG
-				"Page fault in kernel mode - Oooou!!! pid %d\n",
-				current->pid);
-			_exception(SIGSEGV, regs, code, address);
-			return;
-		}
+	if (in_atomic() || !mm) {
+		if (kernel_mode(regs))
+			goto bad_area_nosemaphore;
+
 		/* in_atomic() in user mode is really bad,
 		/* in_atomic() in user mode is really bad,
 		   as is current->mm == NULL. */
 		   as is current->mm == NULL. */
 		printk(KERN_EMERG "Page fault in user mode with "
 		printk(KERN_EMERG "Page fault in user mode with "