Fix: reply to version check even on protocol mismatch
authorJulien Desfossez <jdesfossez@efficios.com>
Wed, 14 Feb 2018 21:32:45 +0000 (16:32 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 20 Feb 2018 00:54:11 +0000 (19:54 -0500)
In the relay, we currently put() the connection when we detect that
the major version from the session daemon is not compatible. We don't
reply to the version check message. The relay still holds a reference
on the connection so it is not closed and the session daemon is left
blocking in recvmsg.

The relay now replies to the version check so the session daemon knows
it is not compatible, and the relay completely closes the connection on
its side and removes the FD from the poll set.

Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-relayd/main.c

index b70026242abadc5c2ba54913be6f8de6e743b921..4f368ddacd944bfd0ea4d97f14304ad0d14ee641 100644 (file)
@@ -1593,6 +1593,7 @@ static int relay_send_version(struct lttcomm_relayd_hdr *recv_hdr,
 {
        int ret;
        struct lttcomm_relayd_version reply, msg;
+       bool compatible = true;
 
        conn->version_check_done = 1;
 
@@ -1617,9 +1618,7 @@ static int relay_send_version(struct lttcomm_relayd_hdr *recv_hdr,
        if (reply.major != be32toh(msg.major)) {
                DBG("Incompatible major versions (%u vs %u), deleting session",
                                reply.major, be32toh(msg.major));
-               connection_put(conn);
-               ret = 0;
-               goto end;
+               compatible = false;
        }
 
        conn->major = reply.major;
@@ -1638,6 +1637,11 @@ static int relay_send_version(struct lttcomm_relayd_hdr *recv_hdr,
                ERR("Relay sending version");
        }
 
+       if (!compatible) {
+               ret = -1;
+               goto end;
+       }
+
        DBG("Version check done using protocol %u.%u", conn->major,
                        conn->minor);
 
This page took 0.026678 seconds and 4 git commands to generate.