Spotted by Coverity Scan Signed-off-by: Fabio M. Di Nitto <fdini...@redhat.com> --- :100644 100644 c260cb8... 2ba6fa0... M cman/qdisk/daemon_init.c :100644 100644 079af01... 175bdb6... M cman/qdisk/main.c cman/qdisk/daemon_init.c | 27 ++++++++++++--------------- cman/qdisk/main.c | 9 ++++++++- 2 files changed, 20 insertions(+), 16 deletions(-)
diff --git a/cman/qdisk/daemon_init.c b/cman/qdisk/daemon_init.c index c260cb8..2ba6fa0 100644 --- a/cman/qdisk/daemon_init.c +++ b/cman/qdisk/daemon_init.c @@ -113,6 +113,11 @@ check_process_running(char *prog, pid_t * pid) *pid = -1; + if (!prog) { + errno = EINVAL; + return -1; + } + /* * Now see if there is a pidfile associated with this cmd in /var/run */ @@ -120,7 +125,10 @@ check_process_running(char *prog, pid_t * pid) memset(filename, 0, PATH_MAX); cmd = basename(prog); - snprintf(filename, sizeof (filename), "/var/run/%s.pid", cmd); + if (!cmd) + return -1; + + snprintf(filename, sizeof (filename) - 1, "/var/run/%s.pid", cmd); ret = stat(filename, &st); if ((ret < 0) || (!st.st_size)) @@ -130,9 +138,8 @@ check_process_running(char *prog, pid_t * pid) * Read the pid from the file. */ fp = fopen(filename, "r"); - if (fp == NULL) { /* error */ + if (fp == NULL) /* error */ return 0; - } ret = fscanf(fp, "%d\n", &oldpid); fclose(fp); @@ -144,6 +151,7 @@ check_process_running(char *prog, pid_t * pid) *pid = oldpid; return 1; } + return 0; } @@ -200,22 +208,12 @@ setup_sigmask(void) void daemon_init(char *prog) { - uid_t uid; - pid_t pid; - - uid = getuid(); - if (uid) { + if (getuid()) { logt_print(LOG_ERR, "daemon_init: Sorry, only root wants to run this.\n"); exit(1); } - if (check_process_running(prog, &pid) && (pid != getpid())) { - logt_print(LOG_ERR, - "daemon_init: Process \"%s\" already running.\n", - prog); - exit(1); - } if (setup_sigmask() < 0) { logt_print(LOG_ERR, "daemon_init: Unable to set signal mask.\n"); exit(1); @@ -226,7 +224,6 @@ daemon_init(char *prog) exit(1); } - update_pidfile(prog); } diff --git a/cman/qdisk/main.c b/cman/qdisk/main.c index 079af01..175bdb6 100644 --- a/cman/qdisk/main.c +++ b/cman/qdisk/main.c @@ -1980,7 +1980,14 @@ main(int argc, char **argv) quorum_header_t qh; qd_priv_t qp; - if (check_process_running(argv[0], &pid) && pid !=getpid()) { + + rv = check_process_running(argv[0], &pid); + if (rv < 0) { + fprintf(stderr, "Unable to determin if %s is already running: %s\n", + argv[0], strerror(errno)); + return -1; + } + if (rv && pid !=getpid()) { printf("QDisk services already running\n"); return 0; } -- 1.7.4.4