sctp: improve path verification

Ensure that a HB can be sent faster than a HB.Interval when performing
path verification of a reachable peer address.

Thanks to Alexander Funke for finding the issue and proposing a fix.

MFC after:	3 days
This commit is contained in:
Michael Tuexen 2022-05-14 08:07:28 +02:00
parent 9312ba239e
commit aab6e5bd1e

View File

@ -1439,7 +1439,8 @@ sctp_heartbeat_timer(struct sctp_inpcb *inp, struct sctp_tcb *stcb,
(TAILQ_EMPTY(&stcb->asoc.sent_queue))) {
sctp_audit_stream_queues_for_size(inp, stcb);
}
if (((net->dest_state & SCTP_ADDR_NOHB) == 0) &&
if ((((net->dest_state & SCTP_ADDR_NOHB) == 0) ||
(net->dest_state & SCTP_ADDR_UNCONFIRMED)) &&
(net_was_pf || ((net->dest_state & SCTP_ADDR_PF) == 0))) {
/*
* When moving to PF during threshold management, a HB has
@ -1459,6 +1460,7 @@ sctp_heartbeat_timer(struct sctp_inpcb *inp, struct sctp_tcb *stcb,
ms_gone_by = 0xffffffff;
}
if ((ms_gone_by >= net->heart_beat_delay) ||
(net->dest_state & SCTP_ADDR_UNCONFIRMED) ||
(net->dest_state & SCTP_ADDR_PF)) {
sctp_send_hb(stcb, net, SCTP_SO_NOT_LOCKED);
}