• Xin Long's avatar
    sctp: set chunk transport correctly when it's a new asoc · 4ff40b86
    Xin Long authored
    In the paths:
    
      sctp_sf_do_unexpected_init() ->
        sctp_make_init_ack()
      sctp_sf_do_dupcook_a/b()() ->
        sctp_sf_do_5_1D_ce()
    
    The new chunk 'retval' transport is set from the incoming chunk 'chunk'
    transport. However, 'retval' transport belong to the new asoc, which
    is a different one from 'chunk' transport's asoc.
    
    It will cause that the 'retval' chunk gets set with a wrong transport.
    Later when sending it and because of Commit b9fd6839 ("sctp: add
    sctp_packet_singleton"), sctp_packet_singleton() will set some fields,
    like vtag to 'retval' chunk from that wrong transport's asoc.
    
    This patch is to fix it by setting 'retval' transport correctly which
    belongs to the right asoc in sctp_make_init_ack() and
    sctp_sf_do_5_1D_ce().
    
    Fixes: b9fd6839 ("sctp: add sctp_packet_singleton")
    Reported-by: default avatarYing Xu <yinxu@redhat.com>
    Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4ff40b86
sm_make_chunk.c 116 KB