]> git.baikalelectronics.ru Git - kernel.git/commit
sctp: Fix sk_ack_backlog wrap-around problem
authorXufeng Zhang <xufeng.zhang@windriver.com>
Thu, 12 Jun 2014 02:53:36 +0000 (10:53 +0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 12 Jun 2014 17:27:14 +0000 (10:27 -0700)
commitc1cda2620b5484f0178354791feee93b26cbf606
tree223a6277c362a5bb244e10b686430564f93dcddd
parent6caa343ee555d44319f8955aa3e1db90bb6e46c4
sctp: Fix sk_ack_backlog wrap-around problem

Consider the scenario:
For a TCP-style socket, while processing the COOKIE_ECHO chunk in
sctp_sf_do_5_1D_ce(), after it has passed a series of sanity check,
a new association would be created in sctp_unpack_cookie(), but afterwards,
some processing maybe failed, and sctp_association_free() will be called to
free the previously allocated association, in sctp_association_free(),
sk_ack_backlog value is decremented for this socket, since the initial
value for sk_ack_backlog is 0, after the decrement, it will be 65535,
a wrap-around problem happens, and if we want to establish new associations
afterward in the same socket, ABORT would be triggered since sctp deem the
accept queue as full.
Fix this issue by only decrementing sk_ack_backlog for associations in
the endpoint's list.

Fix-suggested-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Xufeng Zhang <xufeng.zhang@windriver.com>
Acked-by: Daniel Borkmann <dborkman@redhat.com>
Acked-by: Vlad Yasevich <vyasevich@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sctp/associola.c