conncheck: Only valid stun messages used for Keepalive
authorJohan Sternerup <johast@axis.com>
Thu, 9 Jul 2020 11:37:27 +0000 (13:37 +0200)
committerOlivier CrĂȘte <olivier.crete@collabora.com>
Tue, 20 Oct 2020 22:07:44 +0000 (18:07 -0400)
Previously, a STUN response for which there was no associated request
would be considered valid media input and as such could keep a dead
connection alive. If peer A was communicating with peer B and peer B got
disconnected, the keepalive mechanism in peer A should detect this.
However, a misbehaving STUN server could keep sending STUN responses to
peer A which would then be considered a valid communication between A
and B and thereby prevent the keepalive mechanism from shutting down the
connection.

Situation above refers to a stun message validated as
STUN_VALIDATION_UNMATCHED_RESPONSE. With this change only messages
validated as STUN_VALIDATION_SUCCESS may keep the connection alive.

agent/agent.c
agent/conncheck.c

index 13bdb36..e642b63 100644 (file)
@@ -4341,7 +4341,6 @@ agent_recv_message_unlocked (
         nice_debug ("%s: Valid STUN packet received.", G_STRFUNC);
         retval = RECV_OOB;
         g_free (big_buf);
-        agent->media_after_tick = TRUE;
         goto done;
       }
     }
index 7900251..d511e7a 100644 (file)
@@ -4693,6 +4693,7 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream,
     return FALSE;
   }
 
+  agent->media_after_tick = TRUE;
 
   if (stun_message_get_class (&req) == STUN_REQUEST) {
     if (   agent->compatibility == NICE_COMPATIBILITY_MSN