Module Name:    src
Committed By:   chs
Date:           Wed Jul  7 01:21:47 UTC 2010

Modified Files:
        src/sys/arch/mips/mips: copy.S

Log Message:
set error return value for user addresses in kernel space.
(this fixes a bug in my previous checkin here.)


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/mips/mips/copy.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/mips/mips/copy.S
diff -u src/sys/arch/mips/mips/copy.S:1.9 src/sys/arch/mips/mips/copy.S:1.10
--- src/sys/arch/mips/mips/copy.S:1.9	Sat Mar 20 23:31:29 2010
+++ src/sys/arch/mips/mips/copy.S	Wed Jul  7 01:21:47 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: copy.S,v 1.9 2010/03/20 23:31:29 chs Exp $	*/
+/*	$NetBSD: copy.S,v 1.10 2010/07/07 01:21:47 chs Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -100,7 +100,7 @@
 LEAF(copyinstr)
 	PTR_L	v1, L_PCB(MIPS_CURLWP)
 	PTR_LA	v0, _C_LABEL(copystrerr)
-	blt	a0, zero, _C_LABEL(copystrerr)
+	blt	a0, zero, _C_LABEL(copystrefault)
 	 PTR_S	v0, PCB_ONFAULT(v1)
 	move	t0, a2
 	beq	a2, zero, 4f
@@ -134,7 +134,7 @@
 LEAF(copyoutstr)
 	PTR_L	v1, L_PCB(MIPS_CURLWP)
 	PTR_LA	v0, _C_LABEL(copystrerr)
-	blt	a1, zero, _C_LABEL(copystrerr)
+	blt	a1, zero, _C_LABEL(copystrefault)
 	 PTR_S	v0, PCB_ONFAULT(v1)
 	move	t0, a2
 	beq	a2, zero, 4f
@@ -163,6 +163,11 @@
 	 PTR_S	zero, PCB_ONFAULT(v1)
 END(copystrerr)
 
+LEAF(copystrefault)
+	b	copystrerr
+	 li	v0, EFAULT
+END(copystrefault)
+
 /*
  * kcopy(const void *src, void *dst, size_t len);
  *
@@ -216,7 +221,7 @@
 	PTR_SUBU sp, sp, CALLFRAME_SIZ
 	.mask	0x80000000, -4
 	REG_S	ra, CALLFRAME_RA(sp)
-	 blt	a0, zero, _C_LABEL(copyerr)
+	 blt	a0, zero, _C_LABEL(copyefault)
 	move	v0, a0				# swap a0, a1 for call to memcpy
 	move	a0, a1
 	move	a1, v0
@@ -243,7 +248,7 @@
 	PTR_SUBU sp, sp, CALLFRAME_SIZ
 	.mask	0x80000000, -4
 	REG_S	ra, CALLFRAME_RA(sp)
-	blt	a1, zero, _C_LABEL(copyerr)
+	blt	a1, zero, _C_LABEL(copyefault)
 	move	v0, a0				# swap a0, a1 for call to memcpy
 	move	a0, a1
 	move	a1, v0
@@ -268,6 +273,11 @@
 	 PTR_S	zero, PCB_ONFAULT(v1)
 END(copyerr)
 
+LEAF(copyefault)
+	b	copyerr
+	 li	v0, EFAULT
+END(copyefault)
+
 /*
  * int fuswintr(void *)
  * Fetches a short word of data from the user-space address.

Reply via email to