• Xin Long's avatar
    sctp: check duplicate node before inserting a new transport · cd2b7087
    Xin Long authored
    sctp has changed to use rhlist for transport rhashtable since commit
    7fda702f ("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: 7fda702f ("sctp: use new rhlist interface on sctp transport rhashtable")
    Reported-by: default avatarFabio M. Di Nitto <fdinitto@redhat.com>
    Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    cd2b7087
input.c 34.1 KB