From: Xin Long <[email protected]>
Date: Fri, 17 Feb 2017 16:35:24 +0800
> sctp has changed to use rhlist for transport rhashtable since commit
> 7fda702f9315 ("sctp: use new rhlist interface on sctp transport
> rhashtable").
>
> But rhltable_insert_key doesn't check the duplicate node when inserting
> a node, unlike rhashtable_lookup_insert_key. It may cause duplicate
> assoc/transport in rhashtable. like:
>
> client (addr A, B) server (addr X, Y)
> connect to X INIT (1)
> ------------>
> connect to Y INIT (2)
> ------------>
> INIT_ACK (1)
> <------------
> INIT_ACK (2)
> <------------
>
> After sending INIT (2), one transport will be created and hashed into
> rhashtable. But when receiving INIT_ACK (1) and processing the address
> params, another transport will be created and hashed into rhashtable
> with the same addr Y and EP as the last transport. This will confuse
> the assoc/transport's lookup.
>
> This patch is to fix it by returning err if any duplicate node exists
> before inserting it.
>
> Fixes: 7fda702f9315 ("sctp: use new rhlist interface on sctp transport
> rhashtable")
> Reported-by: Fabio M. Di Nitto <[email protected]>
> Signed-off-by: Xin Long <[email protected]>
Applied.