patch-2.4.0-test7 linux/arch/arm/kernel/signal.c

Next file: linux/arch/arm/kernel/traps.c
Previous file: linux/arch/arm/kernel/setup.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test6/linux/arch/arm/kernel/signal.c linux/arch/arm/kernel/signal.c
@@ -35,37 +35,38 @@
 
 int copy_siginfo_to_user(siginfo_t *to, siginfo_t *from)
 {
+	int err = -EFAULT;;
+
 	if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t)))
-		return -EFAULT;
+		goto out;
+
 	if (from->si_code < 0)
 		return __copy_to_user(to, from, sizeof(siginfo_t));
-	else {
-		int err;
 
-		/* If you change siginfo_t structure, please be sure
-		   this code is fixed accordingly.
-		   It should never copy any pad contained in the structure
-		   to avoid security leaks, but must copy the generic
-		   3 ints plus the relevant union member.  */
-		err = __put_user(from->si_signo, &to->si_signo);
-		err |= __put_user(from->si_errno, &to->si_errno);
-		err |= __put_user((short)from->si_code, &to->si_code);
-		/* First 32bits of unions are always present.  */
-		err |= __put_user(from->si_pid, &to->si_pid);
-		switch (from->si_code >> 16) {
-		case __SI_FAULT >> 16:
-			break;
-		case __SI_CHLD >> 16:
-			err |= __put_user(from->si_utime, &to->si_utime);
-			err |= __put_user(from->si_stime, &to->si_stime);
-			err |= __put_user(from->si_status, &to->si_status);
-		default:
-			err |= __put_user(from->si_uid, &to->si_uid);
-			break;
-		/* case __SI_RT: This is not generated by the kernel as of now.  */
-		}
-		return err;
+	/* If you change siginfo_t structure, please be sure
+	   this code is fixed accordingly.
+	   It should never copy any pad contained in the structure
+	   to avoid security leaks, but must copy the generic
+	   3 ints plus the relevant union member.  */
+	err = __put_user(from->si_signo, &to->si_signo);
+	err |= __put_user(from->si_errno, &to->si_errno);
+	err |= __put_user((short)from->si_code, &to->si_code);
+	/* First 32bits of unions are always present.  */
+	err |= __put_user(from->si_pid, &to->si_pid);
+	switch (from->si_code >> 16) {
+	case __SI_FAULT >> 16:
+		break;
+	case __SI_CHLD >> 16:
+		err |= __put_user(from->si_utime, &to->si_utime);
+		err |= __put_user(from->si_stime, &to->si_stime);
+		err |= __put_user(from->si_status, &to->si_status);
+	default:
+		err |= __put_user(from->si_uid, &to->si_uid);
+		break;
+	/* case __SI_RT: This is not generated by the kernel as of now.  */
 	}
+out:
+	return err;
 }
 
 /*
@@ -175,24 +176,24 @@
 {
 	int err = 0;
 
-	err |= __get_user(regs->ARM_r0, &sc->arm_r0);
-	err |= __get_user(regs->ARM_r1, &sc->arm_r1);
-	err |= __get_user(regs->ARM_r2, &sc->arm_r2);
-	err |= __get_user(regs->ARM_r3, &sc->arm_r3);
-	err |= __get_user(regs->ARM_r4, &sc->arm_r4);
-	err |= __get_user(regs->ARM_r5, &sc->arm_r5);
-	err |= __get_user(regs->ARM_r6, &sc->arm_r6);
-	err |= __get_user(regs->ARM_r7, &sc->arm_r7);
-	err |= __get_user(regs->ARM_r8, &sc->arm_r8);
-	err |= __get_user(regs->ARM_r9, &sc->arm_r9);
-	err |= __get_user(regs->ARM_r10, &sc->arm_r10);
-	err |= __get_user(regs->ARM_fp, &sc->arm_fp);
-	err |= __get_user(regs->ARM_ip, &sc->arm_ip);
-	err |= __get_user(regs->ARM_sp, &sc->arm_sp);
-	err |= __get_user(regs->ARM_lr, &sc->arm_lr);
-	err |= __get_user(regs->ARM_pc, &sc->arm_pc);
+	__get_user_error(regs->ARM_r0, &sc->arm_r0, err);
+	__get_user_error(regs->ARM_r1, &sc->arm_r1, err);
+	__get_user_error(regs->ARM_r2, &sc->arm_r2, err);
+	__get_user_error(regs->ARM_r3, &sc->arm_r3, err);
+	__get_user_error(regs->ARM_r4, &sc->arm_r4, err);
+	__get_user_error(regs->ARM_r5, &sc->arm_r5, err);
+	__get_user_error(regs->ARM_r6, &sc->arm_r6, err);
+	__get_user_error(regs->ARM_r7, &sc->arm_r7, err);
+	__get_user_error(regs->ARM_r8, &sc->arm_r8, err);
+	__get_user_error(regs->ARM_r9, &sc->arm_r9, err);
+	__get_user_error(regs->ARM_r10, &sc->arm_r10, err);
+	__get_user_error(regs->ARM_fp, &sc->arm_fp, err);
+	__get_user_error(regs->ARM_ip, &sc->arm_ip, err);
+	__get_user_error(regs->ARM_sp, &sc->arm_sp, err);
+	__get_user_error(regs->ARM_lr, &sc->arm_lr, err);
+	__get_user_error(regs->ARM_pc, &sc->arm_pc, err);
 #ifdef CONFIG_CPU_32
-	err |= __get_user(regs->ARM_cpsr, &sc->arm_cpsr);
+	__get_user_error(regs->ARM_cpsr, &sc->arm_cpsr, err);
 #endif
 
 	err |= !valid_user_regs(regs);
@@ -289,30 +290,30 @@
 {
 	int err = 0;
 
-	err |= __put_user (regs->ARM_r0, &sc->arm_r0);
-	err |= __put_user (regs->ARM_r1, &sc->arm_r1);
-	err |= __put_user (regs->ARM_r2, &sc->arm_r2);
-	err |= __put_user (regs->ARM_r3, &sc->arm_r3);
-	err |= __put_user (regs->ARM_r4, &sc->arm_r4);
-	err |= __put_user (regs->ARM_r5, &sc->arm_r5);
-	err |= __put_user (regs->ARM_r6, &sc->arm_r6);
-	err |= __put_user (regs->ARM_r7, &sc->arm_r7);
-	err |= __put_user (regs->ARM_r8, &sc->arm_r8);
-	err |= __put_user (regs->ARM_r9, &sc->arm_r9);
-	err |= __put_user (regs->ARM_r10, &sc->arm_r10);
-	err |= __put_user (regs->ARM_fp, &sc->arm_fp);
-	err |= __put_user (regs->ARM_ip, &sc->arm_ip);
-	err |= __put_user (regs->ARM_sp, &sc->arm_sp);
-	err |= __put_user (regs->ARM_lr, &sc->arm_lr);
-	err |= __put_user (regs->ARM_pc, &sc->arm_pc);
+	__put_user_error(regs->ARM_r0, &sc->arm_r0, err);
+	__put_user_error(regs->ARM_r1, &sc->arm_r1, err);
+	__put_user_error(regs->ARM_r2, &sc->arm_r2, err);
+	__put_user_error(regs->ARM_r3, &sc->arm_r3, err);
+	__put_user_error(regs->ARM_r4, &sc->arm_r4, err);
+	__put_user_error(regs->ARM_r5, &sc->arm_r5, err);
+	__put_user_error(regs->ARM_r6, &sc->arm_r6, err);
+	__put_user_error(regs->ARM_r7, &sc->arm_r7, err);
+	__put_user_error(regs->ARM_r8, &sc->arm_r8, err);
+	__put_user_error(regs->ARM_r9, &sc->arm_r9, err);
+	__put_user_error(regs->ARM_r10, &sc->arm_r10, err);
+	__put_user_error(regs->ARM_fp, &sc->arm_fp, err);
+	__put_user_error(regs->ARM_ip, &sc->arm_ip, err);
+	__put_user_error(regs->ARM_sp, &sc->arm_sp, err);
+	__put_user_error(regs->ARM_lr, &sc->arm_lr, err);
+	__put_user_error(regs->ARM_pc, &sc->arm_pc, err);
 #ifdef CONFIG_CPU_32
-	err |= __put_user (regs->ARM_cpsr, &sc->arm_cpsr);
+	__put_user_error(regs->ARM_cpsr, &sc->arm_cpsr, err);
 #endif
 
-	err |= __put_user (current->thread.trap_no, &sc->trap_no);
-	err |= __put_user (current->thread.error_code, &sc->error_code);
-	err |= __put_user (current->thread.address, &sc->fault_address);
-	err |= __put_user (mask, &sc->oldmask);
+	__put_user_error(current->thread.trap_no, &sc->trap_no, err);
+	__put_user_error(current->thread.error_code, &sc->error_code, err);
+	__put_user_error(current->thread.address, &sc->fault_address, err);
+	__put_user_error(mask, &sc->oldmask, err);
 
 	return err;
 }

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)