]> 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)
commita36ba05e0ccb23426f8406b462682bb26d010a02
tree6b4c7f0930dc4bf4ab4eb41d7b9c1212ad5fc798
parent3545382c57e879973d0b1e07772f9f6f3e4c9205
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 2c58cc2bc702 ("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: 2c58cc2bc702 ("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