]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_pjsip: Prevent segfault in UDP registration with flow transports
authorNick French <nickfrench@gmail.com>
Sat, 19 Dec 2020 17:54:50 +0000 (11:54 -0600)
committerFriendly Automation <jenkins2@gerrit.asterisk.org>
Mon, 4 Jan 2021 11:01:30 +0000 (05:01 -0600)
Segfault occurs during outbound UDP registration when all
transport states are being iterated over. The transport object
in the transport is accessed, but flow transports have a NULL
transport object.

Modify to not iterate over any flow transport

ASTERISK-29210 #close

Change-Id: If28dc3a18bdcbd0a49598b09b7fe4404d45c996a

res/res_pjsip/pjsip_message_filter.c

index 1826ee20300769121c04d9f6a07be9d1e1c5f1db..7c91ba853d5ecccfec0c4e580edf6954ceb41df7 100644 (file)
@@ -111,7 +111,8 @@ static pjsip_transport *get_udp_transport(pj_str_t *address, int port)
        }
 
        for (iter = ao2_iterator_init(transport_states, 0); (transport_state = ao2_iterator_next(&iter)); ao2_ref(transport_state, -1)) {
-               if (transport_state->type == AST_TRANSPORT_UDP &&
+               if (!transport_state->flow &&
+                       transport_state->type == AST_TRANSPORT_UDP &&
                        !pj_strcmp(&transport_state->transport->local_name.host, address) &&
                        transport_state->transport->local_name.port == port) {
                        sip_transport = transport_state->transport;