connection: sync send do not block SIGKILL or SIGSTOP
authorDjalal Harouni <tixxdz@opendz.org>
Thu, 18 Dec 2014 15:25:55 +0000 (16:25 +0100)
committerDjalal Harouni <tixxdz@opendz.org>
Thu, 18 Dec 2014 15:25:55 +0000 (16:25 +0100)
SIGKILL and SIGSTOP can't be blocked so clear them out before applying
the sigmask.

Signed-off-by: Djalal Harouni <tixxdz@opendz.org>
connection.c

index 87242298b10ffb2b9d85c095d9f30f8e91bfeee8..0df3730350c2c9a8de2a4fa2c27d94556e4d7958 100644 (file)
@@ -622,8 +622,8 @@ static int kdbus_conn_wait_reply(struct kdbus_conn *conn_src,
 {
        struct kdbus_queue_entry *entry;
        struct kdbus_item *sigmask_item;
-       sigset_t sigsaved;
-       sigset_t sigmask;
+       sigset_t ksigsaved;
+       sigset_t ksigmask;
        int r, ret;
 
        if (WARN_ON(!reply_wait))
@@ -641,8 +641,9 @@ static int kdbus_conn_wait_reply(struct kdbus_conn *conn_src,
        if (IS_ERR(sigmask_item)) {
                sigmask_item = NULL;
        } else {
-               memcpy(&sigmask, &sigmask_item->sigmask, sizeof(sigmask));
-               sigprocmask(SIG_SETMASK, &sigmask, &sigsaved);
+               memcpy(&ksigmask, &sigmask_item->sigmask, sizeof(ksigmask));
+               sigdelsetmask(&ksigmask, sigmask(SIGKILL)|sigmask(SIGSTOP));
+               sigprocmask(SIG_SETMASK, &ksigmask, &ksigsaved);
        }
 
        r = wait_event_interruptible_timeout(reply_wait->reply_dst->wait,
@@ -663,7 +664,7 @@ static int kdbus_conn_wait_reply(struct kdbus_conn *conn_src,
 
                if (sigmask_item) {
                        memcpy(&current->saved_sigmask,
-                              &sigsaved, sizeof(sigsaved));
+                              &ksigsaved, sizeof(ksigsaved));
                        set_restore_sigmask();
                }
 
@@ -671,7 +672,7 @@ static int kdbus_conn_wait_reply(struct kdbus_conn *conn_src,
        }
 
        if (sigmask_item)
-               sigprocmask(SIG_SETMASK, &sigsaved, NULL);
+               sigprocmask(SIG_SETMASK, &ksigsaved, NULL);
 
        if (r == 0)
                ret = -ETIMEDOUT;