User: | Jiri Slaby |
Error type: | Double Unlock |
Error type description: | Some lock is unlocked twice unintentionally in a sequence |
File location: | kernel/signal.c |
Line in file: | 1855 |
Project: | Linux Kernel |
Project version: | 2.6.28 |
Tools: |
Stanse
(1.2)
|
Entered: | 2012-04-30 10:52:00 UTC |
1825 * do nothing in an orphaned pgrp, but SIGSTOP 1826 * always works. Note that siglock needs to be 1827 * dropped during the call to is_orphaned_pgrp() 1828 * because of lock ordering with tasklist_lock. 1829 * This allows an intervening SIGCONT to be posted. 1830 * We need to check for that and bail out if necessary. 1831 */ 1832 if (signr != SIGSTOP) { 1833 spin_unlock_irq(&sighand->siglock); 1834 1835 /* signals can be posted during this window */ 1836 1837 if (is_current_pgrp_orphaned()) 1838 goto relock; 1839 1840 spin_lock_irq(&sighand->siglock); 1841 } 1842 1843 if (likely(do_signal_stop(info->si_signo))) { 1844 /* It released the siglock. */ 1845 goto relock; 1846 } 1847 1848 /* 1849 * We didn't actually stop, due to a race 1850 * with SIGCONT or something like that. 1851 */ 1852 continue; 1853 } 1854 1855 spin_unlock_irq(&sighand->siglock); 1856 1857 /* 1858 * Anything else is fatal, maybe with a core dump. 1859 */ 1860 current->flags |= PF_SIGNALED; 1861 1862 if (sig_kernel_coredump(signr)) { 1863 if (print_fatal_signals) 1864 print_fatal_signal(regs, info->si_signo); 1865 /*