ikev2: Don't increase expected MID after handling MID sync message
If the responder never sent a message the expected MID is 0. While the sent MID (M1) SHOULD be increased beyond the known value, it's not necessarily the case. Since M2 - 1 would then equal UINT_MAX setting that MID would get ignored and while we'd return 0 in the notify we'd actually expect 1 afterwards.
This commit is contained in:
@@ -918,6 +918,9 @@ static status_t build_response(private_task_manager_t *this, message_t *request)
|
|||||||
/* we don't want to resend messages to sync MIDs if requests with the
|
/* we don't want to resend messages to sync MIDs if requests with the
|
||||||
* previous MID arrive */
|
* previous MID arrive */
|
||||||
clear_packets(this->responding.packets);
|
clear_packets(this->responding.packets);
|
||||||
|
/* avoid increasing the expected message ID after handling a message
|
||||||
|
* to sync MIDs with MID 0 */
|
||||||
|
return NEED_MORE;
|
||||||
}
|
}
|
||||||
|
|
||||||
array_compress(this->passive_tasks);
|
array_compress(this->passive_tasks);
|
||||||
|
|||||||
@@ -180,9 +180,7 @@ METHOD(task_t, process, status_t,
|
|||||||
m2 = max(this->send, resp);
|
m2 = max(this->send, resp);
|
||||||
if (resp != m2)
|
if (resp != m2)
|
||||||
{
|
{
|
||||||
/* after responding to this message the expected message ID is increased
|
this->ike_sa->set_message_id(this->ike_sa, FALSE, m2);
|
||||||
* by one so we reduce it here */
|
|
||||||
this->ike_sa->set_message_id(this->ike_sa, FALSE, m2 - 1);
|
|
||||||
}
|
}
|
||||||
init = this->ike_sa->get_message_id(this->ike_sa, TRUE);
|
init = this->ike_sa->get_message_id(this->ike_sa, TRUE);
|
||||||
p2 = max(this->recv, has_active_tasks(this) ? init + 1 : init);
|
p2 = max(this->recv, has_active_tasks(this) ? init + 1 : init);
|
||||||
|
|||||||
Reference in New Issue
Block a user