]> git.baikalelectronics.ru Git - kernel.git/commit
sctp: set chunk transport correctly when it's a new asoc
authorXin Long <lucien.xin@gmail.com>
Mon, 21 Jan 2019 18:42:09 +0000 (02:42 +0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 25 Jan 2019 02:13:57 +0000 (18:13 -0800)
commitc933805a2589975315410034c32b42fb2da01f0d
tree6b4c7f0930dc4bf4ab4eb41d7b9c1212ad5fc798
parent1467ee9f0c6be733c265759cd98a76f64b8b512a
sctp: set chunk transport correctly when it's a new asoc

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 acbb7f385fbb ("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: acbb7f385fbb ("sctp: add sctp_packet_singleton")
Reported-by: Ying Xu <yinxu@redhat.com>
Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sctp/sm_make_chunk.c