Messages in this thread Patch in this message | | | Subject | [PATCH] A few fixes for dodgy tsk->blocked uses | From | David Wragg <> | Date | 30 Nov 1999 02:07:19 +0000 |
| |
Hi,
I wrote a perl script to perform simple checks on code that touches the blocked field of task_struct. It found a small number of problems; the patch to fix them is below.
It also found a whole bunch of problems in drivers/char/ftape/zftape/zftape-init.c. That plays lots of games with current->blocked, and never locks current->sigmask_lock or calls recalc_sigpending. I'm not going to touch that one.
David Wragg
diff -rua linux-2.3.29/arch/mips/kernel/irixsig.c linux-2.3.29.mod/arch/mips/kernel/irixsig.c --- linux-2.3.29/arch/mips/kernel/irixsig.c Thu Aug 19 19:28:02 1999 +++ linux-2.3.29.mod/arch/mips/kernel/irixsig.c Tue Nov 30 01:12:53 1999 @@ -512,6 +512,7 @@ spin_lock_irq(¤t->sigmask_lock); saveset = current->blocked; current->blocked = newset; + recalc_sigpending(current); spin_unlock_irq(¤t->sigmask_lock); regs->regs[2] = -EINTR; diff -rua linux-2.3.29/arch/mips/kernel/signal.c linux-2.3.29.mod/arch/mips/kernel/signal.c --- linux-2.3.29/arch/mips/kernel/signal.c Thu Nov 25 21:55:22 1999 +++ linux-2.3.29.mod/arch/mips/kernel/signal.c Tue Nov 30 01:22:08 1999 @@ -52,6 +52,7 @@ spin_lock_irq(¤t->sigmask_lock); saveset = current->blocked; current->blocked = newset; + recalc_sigpending(current); spin_unlock_irq(¤t->sigmask_lock); regs.regs[2] = EINTR; @@ -78,6 +79,7 @@ spin_lock_irq(¤t->sigmask_lock); saveset = current->blocked; current->blocked = newset; + recalc_sigpending(current); spin_unlock_irq(¤t->sigmask_lock); regs.regs[2] = EINTR; diff -rua linux-2.3.29/arch/sparc/kernel/sys_sunos.c linux-2.3.29.mod/arch/sparc/kernel/sys_sunos.c --- linux-2.3.29/arch/sparc/kernel/sys_sunos.c Mon Sep 13 20:02:35 1999 +++ linux-2.3.29.mod/arch/sparc/kernel/sys_sunos.c Tue Nov 30 01:09:15 1999 @@ -366,6 +366,7 @@ spin_lock_irq(¤t->sigmask_lock); old = current->blocked.sig[0]; current->blocked.sig[0] |= (blk_mask & _BLOCKABLE); + recalc_sigpending(current); spin_unlock_irq(¤t->sigmask_lock); return old; } @@ -377,6 +378,7 @@ spin_lock_irq(¤t->sigmask_lock); retval = current->blocked.sig[0]; current->blocked.sig[0] = (newmask & _BLOCKABLE); + recalc_sigpending(current); spin_unlock_irq(¤t->sigmask_lock); return retval; } diff -rua linux-2.3.29/arch/sparc64/kernel/sys_sunos32.c linux-2.3.29.mod/arch/sparc64/kernel/sys_sunos32.c --- linux-2.3.29/arch/sparc64/kernel/sys_sunos32.c Mon Sep 13 20:02:36 1999 +++ linux-2.3.29.mod/arch/sparc64/kernel/sys_sunos32.c Tue Nov 30 01:05:37 1999 @@ -323,6 +323,7 @@ spin_lock_irq(¤t->sigmask_lock); old = (u32) current->blocked.sig[0]; current->blocked.sig[0] |= (blk_mask & _BLOCKABLE); + recalc_sigpending(current); spin_unlock_irq(¤t->sigmask_lock); return old; } @@ -334,6 +335,7 @@ spin_lock_irq(¤t->sigmask_lock); retval = (u32) current->blocked.sig[0]; current->blocked.sig[0] = (newmask & _BLOCKABLE); + recalc_sigpending(current); spin_unlock_irq(¤t->sigmask_lock); return retval; } diff -rua linux-2.3.29/drivers/char/saa5249.c linux-2.3.29.mod/drivers/char/saa5249.c --- linux-2.3.29/drivers/char/saa5249.c Sun Nov 7 16:24:53 1999 +++ linux-2.3.29.mod/drivers/char/saa5249.c Tue Nov 30 00:50:01 1999 @@ -236,9 +236,10 @@ static void jdelay(unsigned long delay) { - sigset_t oldblocked = current->blocked; + sigset_t oldblocked; spin_lock_irq(¤t->sigmask_lock); + oldblocked = current->blocked; sigfillset(¤t->blocked); recalc_sigpending(current); spin_unlock_irq(¤t->sigmask_lock); diff -rua linux-2.3.29/fs/nfsd/nfssvc.c linux-2.3.29.mod/fs/nfsd/nfssvc.c --- linux-2.3.29/fs/nfsd/nfssvc.c Sun Oct 31 14:46:50 1999 +++ linux-2.3.29.mod/fs/nfsd/nfssvc.c Tue Nov 30 00:19:07 1999 @@ -164,10 +164,12 @@ } else { unsigned int signo; + spin_lock_irq(¤t->sigmask_lock); for (signo = 1; signo <= _NSIG; signo++) if (sigismember(¤t->signal, signo) && !sigismember(¤t->blocked, signo)) break; + spin_unlock_irq(¤t->sigmask_lock); printk(KERN_WARNING "nfsd: terminating on signal %d\n", signo); }
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |