conncheck: Connection check reply must have a remote candidate
authorJakub Adam <jakub.adam@collabora.com>
Thu, 13 Feb 2020 19:33:18 +0000 (20:33 +0100)
committerJakub Adam <jakub.adam@collabora.com>
Fri, 14 Feb 2020 11:11:12 +0000 (12:11 +0100)
Ensure that a conncheck reply is coming from an address and port of a
known remote candidate and that the type of incoming socket matches that
candidate's transport.

Attemps to fix a Coverity issue in which no matching remote_candidate
gets found for a connectivity reply in conn_check_handle_inbound_stun()
(apparently due to transport mismatch), yet
priv_map_reply_to_conn_check_request() still successfully matches it
with a previous request.

agent/conncheck.c

index 7166c12..33218b6 100644 (file)
@@ -3560,6 +3560,15 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
          return TRUE;
        }
 
+        if (remote_candidate == NULL) {
+          candidate_check_pair_fail (stream, agent, p);
+          if (nice_debug_is_enabled ()) {
+            nice_debug ("Agent %p : pair %p FAILED "
+                "(got a matching pair without a known remote candidate).", agent, p);
+          }
+          return TRUE;
+        }
+
        /* note: CONNECTED but not yet READY, see docs */
 
        /* step: handle the possible case of a peer-reflexive