[SCTP]: Correctly handle unexpected INIT-ACK chunk.
Consider the chunk as Out-of-the-Blue if we don't have an endpoint. Otherwise discard it as before. Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com> Signed-off-by: Sridhar Samudrala <sri@us.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
d023f62945
Коммит
610ab73ac4
|
@ -134,6 +134,7 @@ sctp_state_fn_t sctp_sf_violation;
|
|||
sctp_state_fn_t sctp_sf_discard_chunk;
|
||||
sctp_state_fn_t sctp_sf_do_5_2_1_siminit;
|
||||
sctp_state_fn_t sctp_sf_do_5_2_2_dupinit;
|
||||
sctp_state_fn_t sctp_sf_do_5_2_3_initack;
|
||||
sctp_state_fn_t sctp_sf_do_5_2_4_dupcook;
|
||||
sctp_state_fn_t sctp_sf_unk_chunk;
|
||||
sctp_state_fn_t sctp_sf_do_8_5_1_E_sa;
|
||||
|
|
|
@ -1534,6 +1534,28 @@ sctp_disposition_t sctp_sf_do_5_2_2_dupinit(const struct sctp_endpoint *ep,
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* Unexpected INIT-ACK handler.
|
||||
*
|
||||
* Section 5.2.3
|
||||
* If an INIT ACK received by an endpoint in any state other than the
|
||||
* COOKIE-WAIT state, the endpoint should discard the INIT ACK chunk.
|
||||
* An unexpected INIT ACK usually indicates the processing of an old or
|
||||
* duplicated INIT chunk.
|
||||
*/
|
||||
sctp_disposition_t sctp_sf_do_5_2_3_initack(const struct sctp_endpoint *ep,
|
||||
const struct sctp_association *asoc,
|
||||
const sctp_subtype_t type,
|
||||
void *arg, sctp_cmd_seq_t *commands)
|
||||
{
|
||||
/* Per the above section, we'll discard the chunk if we have an
|
||||
* endpoint. If this is an OOTB INIT-ACK, treat it as such.
|
||||
*/
|
||||
if (ep == sctp_sk((sctp_get_ctl_sock()))->ep)
|
||||
return sctp_sf_ootb(ep, asoc, type, arg, commands);
|
||||
else
|
||||
return sctp_sf_discard_chunk(ep, asoc, type, arg, commands);
|
||||
}
|
||||
|
||||
/* Unexpected COOKIE-ECHO handler for peer restart (Table 2, action 'A')
|
||||
*
|
||||
|
|
|
@ -152,7 +152,7 @@ const sctp_sm_table_entry_t *sctp_sm_lookup_event(sctp_event_t event_type,
|
|||
/* SCTP_STATE_EMPTY */ \
|
||||
TYPE_SCTP_FUNC(sctp_sf_ootb), \
|
||||
/* SCTP_STATE_CLOSED */ \
|
||||
TYPE_SCTP_FUNC(sctp_sf_discard_chunk), \
|
||||
TYPE_SCTP_FUNC(sctp_sf_do_5_2_3_initack), \
|
||||
/* SCTP_STATE_COOKIE_WAIT */ \
|
||||
TYPE_SCTP_FUNC(sctp_sf_do_5_1C_ack), \
|
||||
/* SCTP_STATE_COOKIE_ECHOED */ \
|
||||
|
|
Загрузка…
Ссылка в новой задаче