summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Hourihane <alanh@fairlite.co.uk>2011-12-01 12:04:22 +0000
committerAlan Coopersmith <alan.coopersmith@oracle.com>2011-12-05 20:34:12 -0800
commitff992be7b05483f9a0586a27ee0edb6d99580b84 (patch)
tree2beea8fe03848e12f43066bb30a55669853a3606
parent29c9e101f7ad72556aa6b3dbc17d66a1ace9b2b1 (diff)
Fix some resource & memory leaks in libxtrans.
Signed-off-by: Alan Hourihane <alanh@vmware.com> Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
-rw-r--r--Xtrans.c1
-rw-r--r--Xtranssock.c3
-rw-r--r--Xtransutil.c2
3 files changed, 6 insertions, 0 deletions
diff --git a/Xtrans.c b/Xtrans.c
index 522e543..6973ca5 100644
--- a/Xtrans.c
+++ b/Xtrans.c
@@ -549,6 +549,7 @@ TRANS(Reopen) (int type, int trans_id, int fd, char *port)
if (ciptr == NULL)
{
prmsg (1,"Reopen: transport open failed\n");
+ xfree(save_port);
return NULL;
}
diff --git a/Xtranssock.c b/Xtranssock.c
index 955516d..901d721 100644
--- a/Xtranssock.c
+++ b/Xtranssock.c
@@ -492,6 +492,7 @@ TRANS(SocketReopen) (int i _X_UNUSED, int type, int fd, char *port)
if ((addr = (struct sockaddr *) xcalloc (1, portlen + 2)) == NULL) {
prmsg (1, "SocketReopen: malloc(addr) failed\n");
+ xfree (ciptr);
return NULL;
}
ciptr->addr = (char *) addr;
@@ -499,6 +500,8 @@ TRANS(SocketReopen) (int i _X_UNUSED, int type, int fd, char *port)
if ((ciptr->peeraddr = (char *) xcalloc (1, portlen + 2)) == NULL) {
prmsg (1, "SocketReopen: malloc(portaddr) failed\n");
+ xfree (addr);
+ xfree (ciptr);
return NULL;
}
ciptr->peeraddrlen = portlen + 2;
diff --git a/Xtransutil.c b/Xtransutil.c
index 5dd2453..dd36cae 100644
--- a/Xtransutil.c
+++ b/Xtransutil.c
@@ -586,6 +586,7 @@ trans_mkdir(const char *path, int mode)
if (fstat(fd, &fbuf) == -1) {
prmsg(1, "mkdir: ERROR: fstat failed for %s (%d)\n",
path, errno);
+ close(fd);
return -1;
}
/*
@@ -597,6 +598,7 @@ trans_mkdir(const char *path, int mode)
buf.st_ino != fbuf.st_ino) {
prmsg(1, "mkdir: ERROR: inode for %s changed\n",
path);
+ close(fd);
return -1;
}
if (updateOwner && fchown(fd, 0, 0) == 0)