[Cluster-devel] [PATCH 37/41] qdiskd: add failure paths to check_process_running and drop duplicate check
Fabio M. Di Nitto
fdinitto at redhat.com
Wed Nov 23 10:15:56 UTC 2011
Spotted by Coverity Scan
Signed-off-by: Fabio M. Di Nitto <fdinitto at 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
More information about the Cluster-devel
mailing list