mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 07:34:06 +02:00
NetworkPkg/IpSecDxe: Fix wrong IKE header "FLAG" update
*v2: update the commit log and refine the code comments. There are three kinds of IKE Exchange process: #1. Initial Exchange #2. CREATE_CHILD_SA_Exchange #3. Information Exchange The IKE header "FLAG" update is incorrect in #2 and #3 exchange, which may cause the continue session failure. This patch is used to correct the updates of IKE header "FLAG" according the RFC4306 section 3.1. Cc: Ye Ting <ting.ye@intel.com> Cc: Fu Siyuan <siyuan.fu@intel.com> Cc: Zhang Lubo <lubo.zhang@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiaxin Wu <jiaxin.wu@intel.com> Reviewed-by: Ye Ting <ting.ye@intel.com>
This commit is contained in:
parent
40b83d6114
commit
7822a1d91d
@ -76,9 +76,7 @@ Ikev2CreateChildGenerator (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ChildSaSession->SessionCommon.IsInitiator) {
|
if (ChildSaSession->SessionCommon.IsInitiator) {
|
||||||
IkePacket->Header->Flags = IKE_HEADER_FLAGS_CHILD_INIT;
|
IkePacket->Header->Flags = IKE_HEADER_FLAGS_INIT;
|
||||||
} else {
|
|
||||||
IkePacket->Header->Flags = IKE_HEADER_FLAGS_RESPOND;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@ -96,11 +94,13 @@ Ikev2CreateChildGenerator (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (IkeSaSession->SessionCommon.IsInitiator) {
|
if (IkeSaSession->SessionCommon.IsInitiator) {
|
||||||
IkePacket->Header->Flags = IKE_HEADER_FLAGS_CHILD_INIT;
|
IkePacket->Header->Flags = IKE_HEADER_FLAGS_INIT;
|
||||||
} else {
|
|
||||||
IkePacket->Header->Flags = IKE_HEADER_FLAGS_RESPOND;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MessageId != NULL) {
|
||||||
|
IkePacket->Header->Flags |= IKE_HEADER_FLAGS_RESPOND;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// According to RFC4306, Chapter 4.
|
// According to RFC4306, Chapter 4.
|
||||||
|
@ -705,7 +705,7 @@ ON_REPLY:
|
|||||||
//
|
//
|
||||||
// Generate the reply packet if needed and send it out.
|
// Generate the reply packet if needed and send it out.
|
||||||
//
|
//
|
||||||
if (IkePacket->Header->Flags != IKE_HEADER_FLAGS_RESPOND) {
|
if (!(IkePacket->Header->Flags & IKE_HEADER_FLAGS_RESPOND)) {
|
||||||
Reply = mIkev2CreateChild.Generator ((UINT8 *) IkeSaSession, &IkePacket->Header->MessageId);
|
Reply = mIkev2CreateChild.Generator ((UINT8 *) IkeSaSession, &IkePacket->Header->MessageId);
|
||||||
if (Reply != NULL) {
|
if (Reply != NULL) {
|
||||||
Status = Ikev2SendIkePacket (UdpService, (UINT8 *) &(IkeSaSession->SessionCommon), Reply, 0);
|
Status = Ikev2SendIkePacket (UdpService, (UINT8 *) &(IkeSaSession->SessionCommon), Reply, 0);
|
||||||
|
@ -128,7 +128,11 @@ Ikev2InfoGenerator (
|
|||||||
// The input parameter is not correct.
|
// The input parameter is not correct.
|
||||||
//
|
//
|
||||||
goto ERROR_EXIT;
|
goto ERROR_EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (IkeSaSession->SessionCommon.IsInitiator) {
|
||||||
|
IkePacket->Header->Flags = IKE_HEADER_FLAGS_INIT ;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
// Delete the Child SA Information Exchagne
|
// Delete the Child SA Information Exchagne
|
||||||
@ -180,13 +184,16 @@ Ikev2InfoGenerator (
|
|||||||
// Change the IsOnDeleting Flag
|
// Change the IsOnDeleting Flag
|
||||||
//
|
//
|
||||||
ChildSaSession->SessionCommon.IsOnDeleting = TRUE;
|
ChildSaSession->SessionCommon.IsOnDeleting = TRUE;
|
||||||
|
|
||||||
|
if (ChildSaSession->SessionCommon.IsInitiator) {
|
||||||
|
IkePacket->Header->Flags = IKE_HEADER_FLAGS_INIT ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (InfoContext == NULL) {
|
if (InfoContext != NULL) {
|
||||||
IkePacket->Header->Flags = IKE_HEADER_FLAGS_INIT;
|
IkePacket->Header->Flags |= IKE_HEADER_FLAGS_RESPOND;
|
||||||
} else {
|
|
||||||
IkePacket->Header->Flags = IKE_HEADER_FLAGS_RESPOND;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return IkePacket;
|
return IkePacket;
|
||||||
|
|
||||||
ERROR_EXIT:
|
ERROR_EXIT:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
The Definitions related to IKEv2 payload.
|
The Definitions related to IKEv2 payload.
|
||||||
|
|
||||||
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2010 - 2016, Intel Corporation. All rights reserved.<BR>
|
||||||
|
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
@ -37,11 +37,16 @@
|
|||||||
#define IKEV2_PAYLOAD_TYPE_EAP 48
|
#define IKEV2_PAYLOAD_TYPE_EAP 48
|
||||||
|
|
||||||
//
|
//
|
||||||
// IKE header Flag for IKEv2
|
// IKE header Flag (1 octet) for IKEv2, defined in RFC 4306 section 3.1
|
||||||
|
//
|
||||||
|
// I(nitiator) (bit 3 of Flags, 0x08) - This bit MUST be set in messages sent by the
|
||||||
|
// original initiator of the IKE_SA
|
||||||
|
//
|
||||||
|
// R(esponse) (bit 5 of Flags, 0x20) - This bit indicates that this message is a response to
|
||||||
|
// a message containing the same message ID.
|
||||||
//
|
//
|
||||||
#define IKE_HEADER_FLAGS_INIT 0x08
|
#define IKE_HEADER_FLAGS_INIT 0x08
|
||||||
#define IKE_HEADER_FLAGS_RESPOND 0x20
|
#define IKE_HEADER_FLAGS_RESPOND 0x20
|
||||||
#define IKE_HEADER_FLAGS_CHILD_INIT 0
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// IKE Header Exchange Type for IKEv2
|
// IKE Header Exchange Type for IKEv2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user