Commit 0c42749c authored by Vlad Yasevich's avatar Vlad Yasevich Committed by David S. Miller

sctp: fix potential reference of a freed pointer

When sctp attempts to update an assocition, it removes any
addresses that were not in the updated INITs.  However, the loop
may attempt to refrence a transport with address after removing it.
Signed-off-by: default avatarVlad Yasevich <vladislav.yasevich@hp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 561b1733
...@@ -1194,8 +1194,10 @@ void sctp_assoc_update(struct sctp_association *asoc, ...@@ -1194,8 +1194,10 @@ void sctp_assoc_update(struct sctp_association *asoc,
/* Remove any peer addresses not present in the new association. */ /* Remove any peer addresses not present in the new association. */
list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) { list_for_each_safe(pos, temp, &asoc->peer.transport_addr_list) {
trans = list_entry(pos, struct sctp_transport, transports); trans = list_entry(pos, struct sctp_transport, transports);
if (!sctp_assoc_lookup_paddr(new, &trans->ipaddr)) if (!sctp_assoc_lookup_paddr(new, &trans->ipaddr)) {
sctp_assoc_del_peer(asoc, &trans->ipaddr); sctp_assoc_rm_peer(asoc, trans);
continue;
}
if (asoc->state >= SCTP_STATE_ESTABLISHED) if (asoc->state >= SCTP_STATE_ESTABLISHED)
sctp_transport_reset(trans); sctp_transport_reset(trans);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment