projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix: bad check of accept() return value
[lttng-tools.git]
/
src
/
common
/
consumer.c
diff --git
a/src/common/consumer.c
b/src/common/consumer.c
index e0a756a5697c40c7cbbd1ff0887a5c01f61464e3..1045bfb46101d8a6bb63a8c91157f3ffbf5199a2 100644
(file)
--- a/
src/common/consumer.c
+++ b/
src/common/consumer.c
@@
-1106,7
+1106,7
@@
void lttng_consumer_should_exit(struct lttng_consumer_local_data *ctx)
do {
ret = write(ctx->consumer_should_quit[1], "4", 1);
} while (ret < 0 && errno == EINTR);
do {
ret = write(ctx->consumer_should_quit[1], "4", 1);
} while (ret < 0 && errno == EINTR);
- if (ret < 0) {
+ if (ret < 0
|| ret != 1
) {
PERROR("write consumer quit");
}
PERROR("write consumer quit");
}
@@
-1324,7
+1324,7
@@
static int write_relayd_metadata_id(int fd,
do {
ret = write(fd, (void *) &hdr, sizeof(hdr));
} while (ret < 0 && errno == EINTR);
do {
ret = write(fd, (void *) &hdr, sizeof(hdr));
} while (ret < 0 && errno == EINTR);
- if (ret < 0) {
+ if (ret < 0
|| ret != sizeof(hdr)
) {
/*
* This error means that the fd's end is closed so ignore the perror
* not to clubber the error output since this can happen in a normal
/*
* This error means that the fd's end is closed so ignore the perror
* not to clubber the error output since this can happen in a normal
@@
-1334,6
+1334,12
@@
static int write_relayd_metadata_id(int fd,
PERROR("write metadata stream id");
}
DBG3("Consumer failed to write relayd metadata id (errno: %d)", errno);
PERROR("write metadata stream id");
}
DBG3("Consumer failed to write relayd metadata id (errno: %d)", errno);
+ /*
+ * Set ret to a negative value because if ret != sizeof(hdr), we don't
+ * handle writting the missing part so report that as an error and
+ * don't lie to the caller.
+ */
+ ret = -1;
goto end;
}
DBG("Metadata stream id %" PRIu64 " with padding %lu written before data",
goto end;
}
DBG("Metadata stream id %" PRIu64 " with padding %lu written before data",
@@
-2597,7
+2603,7
@@
void *consumer_thread_sessiond_poll(void *data)
/* Blocking call, waiting for transmission */
sock = lttcomm_accept_unix_sock(client_socket);
/* Blocking call, waiting for transmission */
sock = lttcomm_accept_unix_sock(client_socket);
- if (sock <
=
0) {
+ if (sock < 0) {
WARN("On accept");
goto end;
}
WARN("On accept");
goto end;
}
@@
-2759,6
+2765,7
@@
int consumer_add_relayd_socket(int net_seq_idx, int sock_type,
relayd = consumer_allocate_relayd_sock_pair(net_seq_idx);
if (relayd == NULL) {
lttng_consumer_send_error(ctx, LTTCOMM_CONSUMERD_OUTFD_ERROR);
relayd = consumer_allocate_relayd_sock_pair(net_seq_idx);
if (relayd == NULL) {
lttng_consumer_send_error(ctx, LTTCOMM_CONSUMERD_OUTFD_ERROR);
+ ret = -1;
goto error;
}
relayd->sessiond_session_id = (uint64_t) sessiond_id;
goto error;
}
relayd->sessiond_session_id = (uint64_t) sessiond_id;
@@
-2808,11
+2815,17
@@
int consumer_add_relayd_socket(int net_seq_idx, int sock_type,
relayd->control_sock.fd = fd;
/*
relayd->control_sock.fd = fd;
/*
- * Create a session on the relayd and store the returned id.
No need to
- *
grab the socket lock since the relayd object is not yet visibl
e.
+ * Create a session on the relayd and store the returned id.
Lock the
+ *
control socket mutex if the relayd was NOT created befor
e.
*/
*/
+ if (!relayd_created) {
+ pthread_mutex_lock(&relayd->ctrl_sock_mutex);
+ }
ret = relayd_create_session(&relayd->control_sock,
&relayd->relayd_session_id);
ret = relayd_create_session(&relayd->control_sock,
&relayd->relayd_session_id);
+ if (!relayd_created) {
+ pthread_mutex_unlock(&relayd->ctrl_sock_mutex);
+ }
if (ret < 0) {
goto error;
}
if (ret < 0) {
goto error;
}
@@
-2821,6
+2834,7
@@
int consumer_add_relayd_socket(int net_seq_idx, int sock_type,
relayd_id_node = zmalloc(sizeof(struct consumer_relayd_session_id));
if (!relayd_id_node) {
PERROR("zmalloc relayd id node");
relayd_id_node = zmalloc(sizeof(struct consumer_relayd_session_id));
if (!relayd_id_node) {
PERROR("zmalloc relayd id node");
+ ret = -1;
goto error;
}
goto error;
}
@@
-2855,6
+2869,7
@@
int consumer_add_relayd_socket(int net_seq_idx, int sock_type,
break;
default:
ERR("Unknown relayd socket type (%d)", sock_type);
break;
default:
ERR("Unknown relayd socket type (%d)", sock_type);
+ ret = -1;
goto error;
}
goto error;
}
This page took
0.025122 seconds
and
4
git commands to generate.