[PATCH 1/3] Documentation-getdelays: Fix a check for container file usage in main()

SF Markus Elfring
2015-12-24T12:34:20Z

Date: Thu, 24 Dec 2015 11:00:54 +0100

The close() function could be called by the main() function even if
the passed variable "cfd" was assigned a negative value.

* Corresponding implementation details could be improved by adjustments
for jump targets according to the Linux coding style convention.

* Fix the affected condition check.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
Documentation/accounting/getdelays.c | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/Documentation/accounting/getdelays.c b/Documentation/accounting/getdelays.c
index f405780..6656c0c 100644
--- a/Documentation/accounting/getdelays.c
+++ b/Documentation/accounting/getdelays.c
@@ -383,7 +383,7 @@ int main(int argc, char *argv[])
id = get_family_id(nl_sd);
if (!id) {
fprintf(stderr, "Error getting family id, errno %d\n", errno);
- goto err;
+ goto close_socket;
}
PRINTF("family id %d\n", id);

@@ -394,13 +394,13 @@ int main(int argc, char *argv[])
PRINTF("Sent register cpumask, retval %d\n", rc);
if (rc < 0) {
fprintf(stderr, "error sending register cpumask\n");
- goto err;
+ goto close_socket;
}
}

if (tid && containerset) {
fprintf(stderr, "Select either -t or -C, not both\n");
- goto err;
+ goto close_socket;
}

/*
@@ -426,18 +426,18 @@ int main(int argc, char *argv[])
cfd = open(containerpath, O_RDONLY);
if (cfd < 0) {
perror("error opening container file");
- goto err;
+ goto close_socket;
}
rc = send_cmd(nl_sd, id, mypid, CGROUPSTATS_CMD_GET,
CGROUPSTATS_CMD_ATTR_FD, &cfd, sizeof(__u32));
if (rc < 0) {
perror("error sending cgroupstats command");
- goto err;
+ goto close_container;
}
}
if (!maskset && !tid && !containerset) {
usage();
- goto err;
+ goto check_container;
}

do {
@@ -536,11 +536,14 @@ done:
if (rc < 0)
err(rc, "error sending deregister cpumask\n");
}
-err:
+check_container:
+ if (cfd >= 0) {
+close_container:
+ close(cfd);
+ }
+close_socket:
close(nl_sd);
if (fd)
close(fd);
- if (cfd)
- close(cfd);
return 0;
}
--
2.6.3