[PATCH] fix broken 2.4.x rt_sigprocmask error handling

From: Erik Andersen (andersen_at_codepoet.org)
Date: 12/31/03

  • Next message: Yahoo! Greetings: "Here's a copy of your eCard"
    Date:	Wed, 31 Dec 2003 04:45:01 -0700
    To: linux-kernel <linux-kernel@vger.kernel.org>
    
    
    

    SuSv3 says:

            "The argument 'how' indicates the way in which the set is
            changed, and the application shall ensure it consists of
            one of [SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK] ... If
            sigprocmask() fails, the thread's signal mask shall not
            be changed."

    The sigprocmask(2) syscall implements this correctly, however the
    rt_sigprocmask(2) syscall in 2.4.x does not comply with SuSv3.
    When this syscall is provided with a valid 'set' value, and a
    bogus value for 'how', the process signal mask is still changed.

    The attached test application demonstrates the problem. This
    patch below fixes it. Please apply!

    --- linux/kernel/signal.c.orig 2003-12-31 04:01:59.000000000 -0700
    +++ linux/kernel/signal.c 2003-12-31 04:38:06.000000000 -0700
    @@ -879,16 +879,16 @@
                             error = -EINVAL;
                             break;
                     case SIG_BLOCK:
    - sigorsets(&new_set, &old_set, &new_set);
    + sigorsets(&current->blocked, &old_set, &new_set);
                             break;
                     case SIG_UNBLOCK:
    - signandsets(&new_set, &old_set, &new_set);
    + signandsets(&current->blocked, &old_set, &new_set);
                             break;
                     case SIG_SETMASK:
    + current->blocked = new_set;
                             break;
                     }
     
    - current->blocked = new_set;
                     recalc_sigpending(current);
                     spin_unlock_irq(&current->sigmask_lock);
                     if (error)
    --- linux/CREDITS 2003-12-02 13:04:50.000000000 -0700
    +++ linux/CREDITS 2003-12-02 13:04:50.000000000 -0700
    @@ -82,13 +82,13 @@
     S: USA
     
     N: Erik Andersen
    -E: andersee@debian.org
    -W: http://www.xmission.com/~andersen
    -P: 1024/FC4CFFED 78 3C 6A 19 FA 5D 92 5A FB AC 7B A5 A5 E1 FF 8E
    +E: andersen@codepoet.org
    +W: http://www.codepoet.org/
    +P: 1024D/30D39057 1BC4 2742 E885 E4DE 9301 0C82 5F9B 643E 30D3 9057
     D: Maintainer of ide-cd and Uniform CD-ROM driver,
     D: ATAPI CD-Changer support, Major 2.1.x CD-ROM update.
    -S: 4538 South Carnegie Tech Street
    -S: Salt Lake City, Utah 84120
    +S: 352 North 525 East
    +S: Springville, Utah 84663
     S: USA
     
     N: Michael Ang

     -Erik

    --
    Erik B. Andersen             http://codepoet-consulting.com/
    --This message was written using 73% post-consumer electrons--
    
    

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/



  • Next message: Yahoo! Greetings: "Here's a copy of your eCard"

    Relevant Pages