sctp: Do not try to search for the transport twice
authorVlad Yasevich <vyasevich@gmail.com>
Sat, 29 Aug 2015 01:23:39 +0000 (21:23 -0400)
committerDavid S. Miller <davem@davemloft.net>
Sat, 29 Aug 2015 05:25:43 +0000 (22:25 -0700)
When removing an non-primary transport during ASCONF
processing, we end up traversing the transport list
twice: once in sctp_cmd_del_non_primary, and once in
sctp_assoc_del_peer.  We can avoid the second
search and call sctp_assoc_rm_peer() instead.
Found by code inspection during code reviews.

Signed-off-by: Vladislav Yasevich <vyasevich@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sctp/sm_sideeffect.c

index 85e6f03aeb700d8e5fcdb103464add4240ce29f9..35df1266bf073aa9a7a4145da787ff42e95a7ee1 100644 (file)
@@ -954,7 +954,7 @@ static void sctp_cmd_del_non_primary(struct sctp_association *asoc)
                t = list_entry(pos, struct sctp_transport, transports);
                if (!sctp_cmp_addr_exact(&t->ipaddr,
                                         &asoc->peer.primary_addr)) {
                t = list_entry(pos, struct sctp_transport, transports);
                if (!sctp_cmp_addr_exact(&t->ipaddr,
                                         &asoc->peer.primary_addr)) {
-                       sctp_assoc_del_peer(asoc, &t->ipaddr);
+                       sctp_assoc_rm_peer(asoc, t);
                }
        }
 }
                }
        }
 }