summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2006-06-23 14:38:33 +1000
committerNeil Brown <neilb@suse.de>2006-06-23 14:38:33 +1000
commit2e075a16da4963f54cd556403ca9e15a68de27fd (patch)
tree5e412d94ec623315a93286af4da52a2883dcd0a4
parentff42180930a444cea7f19e55e2cd2bfe6d3f108b (diff)
downloadnfs-utils-2e075a16da4963f54cd556403ca9e15a68de27fd.tar.gz
nfs-utils-2e075a16da4963f54cd556403ca9e15a68de27fd.tar.xz
nfs-utils-2e075a16da4963f54cd556403ca9e15a68de27fd.zip
Fix various issues discovered by Coverity
Thanks to Michael Halcrow for finding them.
-rw-r--r--support/misc/mountpoint.c18
-rw-r--r--support/nfs/cacheio.c6
-rw-r--r--support/nfs/svc_socket.c2
-rw-r--r--tools/rpcgen/rpc_parse.c11
-rw-r--r--tools/rpcgen/rpc_scan.c1
-rw-r--r--utils/idmapd/cfg.c10
-rw-r--r--utils/idmapd/idmapd.c8
-rw-r--r--utils/rquotad/rquota_server.c3
-rw-r--r--utils/statd/notlist.c6
9 files changed, 37 insertions, 28 deletions
diff --git a/support/misc/mountpoint.c b/support/misc/mountpoint.c
index 6d0f34e..2cf1324 100644
--- a/support/misc/mountpoint.c
+++ b/support/misc/mountpoint.c
@@ -20,15 +20,21 @@ is_mountpoint(char *path)
*/
char *dotdot;
struct stat stb, pstb;
+ int rv;
dotdot = malloc(strlen(path)+4);
+ if (!dotdot)
+ return 0;
strcat(strcpy(dotdot, path), "/..");
if (lstat(path, &stb) != 0 ||
lstat(dotdot, &pstb) != 0)
- return 0;
-
- if (stb.st_dev != pstb.st_dev
- || stb.st_ino == pstb.st_ino)
- return 1;
- return 0;
+ rv = 0;
+ else
+ if (stb.st_dev != pstb.st_dev ||
+ stb.st_ino == pstb.st_ino)
+ rv = 1;
+ else
+ rv = 0;
+ free(dotdot);
+ return rv;
}
diff --git a/support/nfs/cacheio.c b/support/nfs/cacheio.c
index d7ad429..3e868d8 100644
--- a/support/nfs/cacheio.c
+++ b/support/nfs/cacheio.c
@@ -259,9 +259,9 @@ cache_flush(int force)
"nfsd.export",
NULL
};
- stb.st_mtime = time(0);
- if (!force)
- stat(_PATH_ETAB, &stb);
+ if (force ||
+ stat(_PATH_ETAB, &stb) != 0)
+ stb.st_mtime = time(0);
sprintf(stime, "%ld\n", stb.st_mtime);
for (c=0; cachelist[c]; c++) {
diff --git a/support/nfs/svc_socket.c b/support/nfs/svc_socket.c
index 888c915..c41a1a3 100644
--- a/support/nfs/svc_socket.c
+++ b/support/nfs/svc_socket.c
@@ -42,7 +42,7 @@ svc_socket (u_long number, int type, int protocol, int reuse)
socklen_t len = sizeof (struct sockaddr_in);
char rpcdata [1024], servdata [1024];
struct rpcent rpcbuf, *rpcp;
- struct servent servbuf, *servp;
+ struct servent servbuf, *servp = NULL;
int sock, ret;
const char *proto = protocol == IPPROTO_TCP ? "tcp" : "udp";
diff --git a/tools/rpcgen/rpc_parse.c b/tools/rpcgen/rpc_parse.c
index 577312e..70d1260 100644
--- a/tools/rpcgen/rpc_parse.c
+++ b/tools/rpcgen/rpc_parse.c
@@ -94,6 +94,7 @@ get_definition(void)
def_const(defp);
break;
case TOK_EOF:
+ free(defp);
return (NULL);
default:
error("definition keyword expected");
@@ -290,7 +291,6 @@ def_union(definition *defp)
declaration dec;
case_list *cases;
case_list **tailp;
- int flag;
defp->def_kind = DEF_UNION;
scan(TOK_IDENT, &tok);
@@ -309,7 +309,6 @@ def_union(definition *defp)
cases->case_name = tok.str;
scan(TOK_COLON, &tok);
/* now peek at next token */
- flag=0;
if(peekscan(TOK_CASE,&tok))
{
@@ -325,14 +324,6 @@ def_union(definition *defp)
}while(peekscan(TOK_CASE,&tok));
}
- else
- if(flag)
- {
-
- *tailp = cases;
- tailp = &cases->next;
- cases = ALLOC(case_list);
- };
get_declaration(&dec, DEF_UNION);
cases->case_decl = dec;
diff --git a/tools/rpcgen/rpc_scan.c b/tools/rpcgen/rpc_scan.c
index 62d906d..51eecfe 100644
--- a/tools/rpcgen/rpc_scan.c
+++ b/tools/rpcgen/rpc_scan.c
@@ -468,6 +468,7 @@ docppline(char *line, int *lineno, char **fname)
*p = 0;
if (*file == 0) {
*fname = NULL;
+ free(file);
} else {
*fname = file;
}
diff --git a/utils/idmapd/cfg.c b/utils/idmapd/cfg.c
index b22a7c9..16d392a 100644
--- a/utils/idmapd/cfg.c
+++ b/utils/idmapd/cfg.c
@@ -487,8 +487,10 @@ conf_get_list (char *section, char *tag)
if (!node)
goto cleanup;
node->field = strdup (field);
- if (!node->field)
+ if (!node->field) {
+ free(node);
goto cleanup;
+ }
TAILQ_INSERT_TAIL (&list->fields, node, link);
}
free (liststr);
@@ -523,8 +525,10 @@ conf_get_tag_list (char *section)
if (!node)
goto cleanup;
node->field = strdup (cb->tag);
- if (!node->field)
+ if (!node->field) {
+ free(node);
goto cleanup;
+ }
TAILQ_INSERT_TAIL (&list->fields, node, link);
}
return list;
@@ -708,7 +712,7 @@ conf_remove (int transaction, char *section, char *tag)
return 0;
fail:
- if (node->section)
+ if (node && node->section)
free (node->section);
if (node)
free (node);
diff --git a/utils/idmapd/idmapd.c b/utils/idmapd/idmapd.c
index 158feaf..1231db4 100644
--- a/utils/idmapd/idmapd.c
+++ b/utils/idmapd/idmapd.c
@@ -1003,9 +1003,11 @@ mydaemon(int nochdir, int noclose)
if (noclose == 0) {
tempfd = open("/dev/null", O_RDWR);
- dup2(tempfd, 0);
- dup2(tempfd, 1);
- dup2(tempfd, 2);
+ if (tempfd >= 0) {
+ dup2(tempfd, 0);
+ dup2(tempfd, 1);
+ dup2(tempfd, 2);
+ }
closeall(3);
}
diff --git a/utils/rquotad/rquota_server.c b/utils/rquotad/rquota_server.c
index 109c94e..e3715bd 100644
--- a/utils/rquotad/rquota_server.c
+++ b/utils/rquotad/rquota_server.c
@@ -201,7 +201,6 @@ getquota_rslt *getquotainfo(int flags, caddr_t *argp, struct svc_req *rqstp)
free(qfpathname);
continue;
}
- free(qfpathname);
lseek(fd, (long) dqoff(id), L_SET);
switch (read(fd, &dq_dqb, sizeof(struct dqblk))) {
case 0:/* EOF */
@@ -215,6 +214,7 @@ getquota_rslt *getquotainfo(int flags, caddr_t *argp, struct svc_req *rqstp)
break;
default: /* ERROR */
close(fd);
+ free(qfpathname);
continue;
}
close(fd);
@@ -228,6 +228,7 @@ getquota_rslt *getquotainfo(int flags, caddr_t *argp, struct svc_req *rqstp)
dqb.dqb_btime = dq_dqb.dqb_btime;
dqb.dqb_itime = dq_dqb.dqb_itime;
}
+ free(qfpathname);
endmntent(fp);
if (err && (flags & ACTIVE)) {
diff --git a/utils/statd/notlist.c b/utils/statd/notlist.c
index 4f52b1d..98aa6e2 100644
--- a/utils/statd/notlist.c
+++ b/utils/statd/notlist.c
@@ -61,8 +61,12 @@ nlist_new(char *my_name, char *mon_name, int state)
NL_TIMES(new) = MAX_TRIES;
NL_STATE(new) = state;
if (!(NL_MY_NAME(new) = xstrdup(my_name))
- || !(NL_MON_NAME(new) = xstrdup(mon_name)))
+ || !(NL_MON_NAME(new) = xstrdup(mon_name))) {
+ if (NL_MY_NAME(new))
+ free(NL_MY_NAME(new));
+ free(new);
return NULL;
+ }
return new;
}