]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commit
sctp: set new_asoc temp when processing dupcookie
authorXin Long <lucien.xin@gmail.com>
Tue, 23 May 2017 05:28:55 +0000 (13:28 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 24 May 2017 19:21:04 +0000 (15:21 -0400)
commit7e06297768886337707f5833942b3bd524a6d3d5
tree8114c09b85e08d5eb69bbfbe40b0c2cd29ce1d0f
parent3ab2137915aea0ce7b3ec02e0f260ecc0f1c289d
sctp: set new_asoc temp when processing dupcookie

After sctp changed to use transport hashtable, a transport would be
added into global hashtable when adding the peer to an asoc, then
the asoc can be got by searching the transport in the hashtbale.

The problem is when processing dupcookie in sctp_sf_do_5_2_4_dupcook,
a new asoc would be created. A peer with the same addr and port as
the one in the old asoc might be added into the new asoc, but fail
to be added into the hashtable, as they also belong to the same sk.

It causes that sctp's dupcookie processing can not really work.

Since the new asoc will be freed after copying it's information to
the old asoc, it's more like a temp asoc. So this patch is to fix
it by setting it as a temp asoc to avoid adding it's any transport
into the hashtable and also avoid allocing assoc_id.

An extra thing it has to do is to also alloc stream info for any
temp asoc, as sctp dupcookie process needs it to update old asoc.
But I don't think it would hurt something, as a temp asoc would
always be freed after finishing processing cookie echo packet.

Reported-by: Jianwen Ji <jiji@redhat.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Acked-by: Vlad Yasevich <vyasevich@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sctp/sm_make_chunk.c
net/sctp/sm_statefuns.c