* [PATCH lttng-tools 1/2] Fix: lttng-crash: fd leak
@ 2015-09-03 21:52 Jonathan Rajotte
0 siblings, 0 replies; 2+ messages in thread
From: Jonathan Rajotte @ 2015-09-03 21:52 UTC (permalink / raw)
To: lttng-dev; +Cc: jgalar
At the same time make sure to have on one exit-point.
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
---
src/bin/lttng-crash/lttng-crash.c | 30 +++++++++++++++++++++++++-----
1 file changed, 25 insertions(+), 5 deletions(-)
diff --git a/src/bin/lttng-crash/lttng-crash.c b/src/bin/lttng-crash/lttng-crash.c
index 4f1efe9..8e57034 100644
--- a/src/bin/lttng-crash/lttng-crash.c
+++ b/src/bin/lttng-crash/lttng-crash.c
@@ -103,7 +103,7 @@ enum rb_modes {
struct crash_abi_unknown {
uint8_t magic[RB_CRASH_DUMP_ABI_MAGIC_LEN];
- uint64_t mmap_length; /* Overall lenght of crash record */
+ uint64_t mmap_length; /* Overall length of crash record */
uint16_t endian; /*
* { 0x12, 0x34 }: big endian
* { 0x34, 0x12 }: little endian
@@ -326,26 +326,30 @@ int copy_file(const char *file_dest, const char *file_src)
int fd_src, fd_dest;
ssize_t readlen, writelen;
char buf[COPY_BUFLEN];
+ int ret;
DBG("Copy metadata file '%s' into '%s'", file_src, file_dest);
fd_src = open(file_src, O_RDONLY);
if (fd_src < 0) {
PERROR("Error opening %s for reading", file_src);
- return fd_src;
+ ret = fd_src;
+ goto error;
}
fd_dest = open(file_dest, O_RDWR | O_CREAT | O_EXCL,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
if (fd_dest < 0) {
PERROR("Error opening %s for writing", file_dest);
- return fd_dest;
+ ret = fd_dest;
+ goto error;
}
for (;;) {
readlen = lttng_read(fd_src, buf, COPY_BUFLEN);
if (readlen < 0) {
PERROR("Error reading input file");
- return -1;
+ ret = -1;
+ goto error;
}
if (!readlen) {
break;
@@ -353,10 +357,26 @@ int copy_file(const char *file_dest, const char *file_src)
writelen = lttng_write(fd_dest, buf, readlen);
if (writelen < readlen) {
PERROR("Error writing to output file");
- return -1;
+ ret = -1;
+ goto error;
}
}
+
+ ret = close(fd_src);
+ if (ret < 0) {
+ PERROR("Error closing %s", file_src);
+ goto error;
+ }
+
+ ret = close(fd_dest);
+ if (ret < 0) {
+ PERROR("Error closing %s", file_dest);
+ goto error;
+ }
+
return 0;
+error:
+ return ret;
}
static
--
2.1.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH lttng-tools 1/2] Fix: lttng-crash: fd leak
[not found] <1441317127-10878-1-git-send-email-jonathan.rajotte-julien@efficios.com>
@ 2015-09-05 16:19 ` Jérémie Galarneau
0 siblings, 0 replies; 2+ messages in thread
From: Jérémie Galarneau @ 2015-09-05 16:19 UTC (permalink / raw)
To: Jonathan Rajotte; +Cc: lttng-dev, Jeremie Galarneau
Merged with modifications.
While this does correct the leak in the common case, it will also leak
when the "error" label is jumped to or close an uninitialized file
descriptor. The edited version I have merged takes care of both
issues.
Thanks!
Jérémie
On Thu, Sep 3, 2015 at 5:52 PM, Jonathan Rajotte
<jonathan.rajotte-julien@efficios.com> wrote:
> At the same time make sure to have on one exit-point.
>
> Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
> ---
> src/bin/lttng-crash/lttng-crash.c | 30 +++++++++++++++++++++++++-----
> 1 file changed, 25 insertions(+), 5 deletions(-)
>
> diff --git a/src/bin/lttng-crash/lttng-crash.c b/src/bin/lttng-crash/lttng-crash.c
> index 4f1efe9..8e57034 100644
> --- a/src/bin/lttng-crash/lttng-crash.c
> +++ b/src/bin/lttng-crash/lttng-crash.c
> @@ -103,7 +103,7 @@ enum rb_modes {
>
> struct crash_abi_unknown {
> uint8_t magic[RB_CRASH_DUMP_ABI_MAGIC_LEN];
> - uint64_t mmap_length; /* Overall lenght of crash record */
> + uint64_t mmap_length; /* Overall length of crash record */
> uint16_t endian; /*
> * { 0x12, 0x34 }: big endian
> * { 0x34, 0x12 }: little endian
> @@ -326,26 +326,30 @@ int copy_file(const char *file_dest, const char *file_src)
> int fd_src, fd_dest;
> ssize_t readlen, writelen;
> char buf[COPY_BUFLEN];
> + int ret;
>
> DBG("Copy metadata file '%s' into '%s'", file_src, file_dest);
>
> fd_src = open(file_src, O_RDONLY);
> if (fd_src < 0) {
> PERROR("Error opening %s for reading", file_src);
> - return fd_src;
> + ret = fd_src;
> + goto error;
> }
> fd_dest = open(file_dest, O_RDWR | O_CREAT | O_EXCL,
> S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
> if (fd_dest < 0) {
> PERROR("Error opening %s for writing", file_dest);
> - return fd_dest;
> + ret = fd_dest;
> + goto error;
> }
>
> for (;;) {
> readlen = lttng_read(fd_src, buf, COPY_BUFLEN);
> if (readlen < 0) {
> PERROR("Error reading input file");
> - return -1;
> + ret = -1;
> + goto error;
> }
> if (!readlen) {
> break;
> @@ -353,10 +357,26 @@ int copy_file(const char *file_dest, const char *file_src)
> writelen = lttng_write(fd_dest, buf, readlen);
> if (writelen < readlen) {
> PERROR("Error writing to output file");
> - return -1;
> + ret = -1;
> + goto error;
> }
> }
> +
> + ret = close(fd_src);
> + if (ret < 0) {
> + PERROR("Error closing %s", file_src);
> + goto error;
> + }
> +
> + ret = close(fd_dest);
> + if (ret < 0) {
> + PERROR("Error closing %s", file_dest);
> + goto error;
> + }
> +
> return 0;
> +error:
> + return ret;
> }
>
> static
> --
> 2.1.4
>
--
Jérémie Galarneau
EfficiOS Inc.
http://www.efficios.com
_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-09-05 16:19 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-03 21:52 [PATCH lttng-tools 1/2] Fix: lttng-crash: fd leak Jonathan Rajotte
[not found] <1441317127-10878-1-git-send-email-jonathan.rajotte-julien@efficios.com>
2015-09-05 16:19 ` Jérémie Galarneau
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.