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
- Lines: 159
- Date:
Sun Aug 13 09:54:15 2000
- Orig file:
v2.4.0-test6/linux/arch/arm/kernel/signal.c
- Orig date:
Thu Jul 27 17:37:59 2000
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)