85 lines
2.9 KiB
Diff
85 lines
2.9 KiB
Diff
|
|
From 67bdae069751e4779e738283e3d8a5873622bfc0 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Zdenek Kabelac <zkabelac@redhat.com>
|
||
|
|
Date: Fri, 1 Nov 2019 20:25:39 +0100
|
||
|
|
Subject: [PATCH 169/180] cov: missing checks of syscalls
|
||
|
|
|
||
|
|
Check for sigaction,sigprocmask,pthread_sigmask errors
|
||
|
|
---
|
||
|
|
daemons/clvmd/clvmd.c | 10 ++++++----
|
||
|
|
libdaemon/server/daemon-server.c | 9 ++++++---
|
||
|
|
tools/toollib.c | 3 ++-
|
||
|
|
3 files changed, 14 insertions(+), 8 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/daemons/clvmd/clvmd.c b/daemons/clvmd/clvmd.c
|
||
|
|
index 829c5e5..e1d8a79 100644
|
||
|
|
--- a/daemons/clvmd/clvmd.c
|
||
|
|
+++ b/daemons/clvmd/clvmd.c
|
||
|
|
@@ -887,7 +887,8 @@ static void main_loop(int cmd_timeout)
|
||
|
|
sigemptyset(&ss);
|
||
|
|
sigaddset(&ss, SIGINT);
|
||
|
|
sigaddset(&ss, SIGTERM);
|
||
|
|
- pthread_sigmask(SIG_UNBLOCK, &ss, NULL);
|
||
|
|
+ if (pthread_sigmask(SIG_UNBLOCK, &ss, NULL))
|
||
|
|
+ log_warn("WARNING: Failed to unblock SIGCHLD.");
|
||
|
|
/* Main loop */
|
||
|
|
while (!quit) {
|
||
|
|
fd_set in;
|
||
|
|
@@ -1731,11 +1732,12 @@ static __attribute__ ((noreturn)) void *pre_and_post_thread(void *arg)
|
||
|
|
SIGUSR2 (kills subthreads) */
|
||
|
|
sigemptyset(&ss);
|
||
|
|
sigaddset(&ss, SIGUSR1);
|
||
|
|
- pthread_sigmask(SIG_BLOCK, &ss, NULL);
|
||
|
|
-
|
||
|
|
+ if (pthread_sigmask(SIG_BLOCK, &ss, NULL))
|
||
|
|
+ log_warn("WARNING: Failed to block SIGUSR1.");
|
||
|
|
sigdelset(&ss, SIGUSR1);
|
||
|
|
sigaddset(&ss, SIGUSR2);
|
||
|
|
- pthread_sigmask(SIG_UNBLOCK, &ss, NULL);
|
||
|
|
+ if (pthread_sigmask(SIG_UNBLOCK, &ss, NULL))
|
||
|
|
+ log_warn("WARNING: Failed to unblock SIGUSR2.");
|
||
|
|
|
||
|
|
/* Loop around doing PRE and POST functions until the client goes away */
|
||
|
|
while (!client->bits.localsock.finished) {
|
||
|
|
diff --git a/libdaemon/server/daemon-server.c b/libdaemon/server/daemon-server.c
|
||
|
|
index 62f403a..51e5866 100644
|
||
|
|
--- a/libdaemon/server/daemon-server.c
|
||
|
|
+++ b/libdaemon/server/daemon-server.c
|
||
|
|
@@ -663,14 +663,17 @@ void daemon_start(daemon_state s)
|
||
|
|
FD_SET(s.socket_fd, &in);
|
||
|
|
|
||
|
|
_reap(s, 0);
|
||
|
|
- sigprocmask(SIG_SETMASK, &new_set, NULL);
|
||
|
|
+ if (sigprocmask(SIG_SETMASK, &new_set, NULL))
|
||
|
|
+ perror("sigprocmask error");
|
||
|
|
if (_shutdown_requested && !s.threads->next) {
|
||
|
|
- sigprocmask(SIG_SETMASK, &old_set, NULL);
|
||
|
|
+ if (sigprocmask(SIG_SETMASK, &old_set, NULL))
|
||
|
|
+ perror("sigprocmask error");
|
||
|
|
INFO(&s, "%s shutdown requested", s.name);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
ret = pselect(s.socket_fd + 1, &in, NULL, NULL, _get_timeout(s), &old_set);
|
||
|
|
- sigprocmask(SIG_SETMASK, &old_set, NULL);
|
||
|
|
+ if (sigprocmask(SIG_SETMASK, &old_set, NULL))
|
||
|
|
+ perror("sigprocmask error");
|
||
|
|
|
||
|
|
if (ret < 0) {
|
||
|
|
if (errno != EINTR && errno != EAGAIN &&
|
||
|
|
diff --git a/tools/toollib.c b/tools/toollib.c
|
||
|
|
index 42179d9..0c1c095 100644
|
||
|
|
--- a/tools/toollib.c
|
||
|
|
+++ b/tools/toollib.c
|
||
|
|
@@ -59,7 +59,8 @@ int become_daemon(struct cmd_context *cmd, int skip_lvm)
|
||
|
|
|
||
|
|
log_verbose("Forking background process from command: %s", cmd->cmd_line);
|
||
|
|
|
||
|
|
- sigaction(SIGCHLD, &act, NULL);
|
||
|
|
+ if (sigaction(SIGCHLD, &act, NULL))
|
||
|
|
+ log_warn("WARNING: Failed to set SIGCHLD action.");
|
||
|
|
|
||
|
|
if (!skip_lvm)
|
||
|
|
if (!sync_local_dev_names(cmd)) { /* Flush ops and reset dm cookie */
|
||
|
|
--
|
||
|
|
1.8.3.1
|
||
|
|
|