Fix: relayd: return from function without unlocking session lock
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 31 Jan 2020 22:58:56 +0000 (17:58 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 31 Jan 2020 22:58:56 +0000 (17:58 -0500)
Some error paths in relay_close_trace_chunk() skip the unlock
of the relay_session's lock.

412203 Missing unlock

May result in deadlock if there is another attempt to acquire the
lock.

In relay_close_trace_chunk: Missing a release of a lock on a
path (CWE-667)

Reported-by: Coverity Scan
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I43187959abf00e761f7a255f4af7cd53e0c451fb

src/bin/lttng-relayd/main.c

index 3295b009a40f1a93ddc766e288f1bd3cdcb2cf54..3aef0fabc9d84d358349bc77b97bf958a0a48d0d 100644 (file)
@@ -2934,7 +2934,7 @@ static int relay_close_trace_chunk(const struct lttcomm_relayd_hdr *recv_hdr,
                                new_path);
                if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
                        ret = -1;
                                new_path);
                if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
                        ret = -1;
-                       goto end;
+                       goto end_unlock_session;
                }
                session->ongoing_rotation = false;
        }
                }
                session->ongoing_rotation = false;
        }
@@ -2952,7 +2952,7 @@ static int relay_close_trace_chunk(const struct lttcomm_relayd_hdr *recv_hdr,
                chunk_status = lttng_trace_chunk_rename_path(chunk, old_path);
                if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
                        ret = -1;
                chunk_status = lttng_trace_chunk_rename_path(chunk, old_path);
                if (chunk_status != LTTNG_TRACE_CHUNK_STATUS_OK) {
                        ret = -1;
-                       goto end;
+                       goto end_unlock_session;
                }
        }
        chunk_status = lttng_trace_chunk_set_close_timestamp(
                }
        }
        chunk_status = lttng_trace_chunk_set_close_timestamp(
This page took 0.026999 seconds and 4 git commands to generate.