Skip to content

Commit

Permalink
page-xfer: close sockets on errror paths
Browse files Browse the repository at this point in the history
CID 996195 (cyrillos#1 of 1): Resource leak (RESOURCE_LEAK)
10. leaked_handle: Handle variable ask going out of scope leaks the handle.

CID 996196 (cyrillos#3 of 3): Resource leak (RESOURCE_LEAK)
10. leaked_handle: Handle variable sk going out of scope leaks the handle.
  • Loading branch information
avagin committed Apr 16, 2013
1 parent 6f4d8a1 commit 882eaf1
Showing 1 changed file with 17 additions and 10 deletions.
27 changes: 17 additions & 10 deletions page-xfer.c
Original file line number Diff line number Diff line change
Expand Up @@ -106,16 +106,18 @@ static int page_server_add(int sk, struct page_server_iov *pi)

static int page_server_serve(int sk)
{
int ret = -1;

if (pipe(cxfer.p)) {
pr_perror("Can't make pipe for xfer");
close(sk);
return -1;
}

cxfer.pipe_size = fcntl(cxfer.p[0], F_GETPIPE_SZ, 0);
pr_debug("Created xfer pipe size %u\n", cxfer.pipe_size);

while (1) {
int ret;
struct page_server_iov pi;

ret = read(sk, &pi, sizeof(pi));
Expand All @@ -124,7 +126,8 @@ static int page_server_serve(int sk)

if (ret != sizeof(pi)) {
pr_perror("Can't read pagemap from socket");
return -1;
ret = -1;
break;
}

switch (pi.cmd) {
Expand All @@ -138,16 +141,18 @@ static int page_server_serve(int sk)
}

if (ret)
return -1;
break;
}

pr_info("Session over\n");
return 0;

close(sk);
return ret;
}

int cr_page_server(void)
{
int sk, ask;
int sk, ask = -1;
struct sockaddr_in caddr;
socklen_t clen = sizeof(caddr);

Expand All @@ -165,22 +170,24 @@ int cr_page_server(void)
opts.ps_addr.sin_family = AF_INET;
if (bind(sk, (struct sockaddr *)&opts.ps_addr, sizeof(opts.ps_addr))) {
pr_perror("Can't bind page server\n");
return -1;
goto out;
}

if (listen(sk, 1)) {
pr_perror("Can't listen on page server socket");
return -1;
goto out;
}

ask = accept(sk, (struct sockaddr *)&caddr, &clen);
if (ask < 0) {
if (ask < 0)
pr_perror("Can't accept connection to server");
return -1;
}

out:
close(sk);

if (ask < 0)
return -1;

pr_info("Accepted connection from %s:%u\n",
inet_ntoa(caddr.sin_addr),
(int)ntohs(caddr.sin_port));
Expand Down

0 comments on commit 882eaf1

Please sign in to comment.