Blame SOURCES/edk2-NetworkPkg-IScsiDxe-assert-that-IScsiBinToHex-always.patch

d15d15
From 95ce1cb291324bdef3c790e367ba6ac8752c5f23 Mon Sep 17 00:00:00 2001
d15d15
From: Laszlo Ersek <lersek@redhat.com>
d15d15
Date: Tue, 27 Apr 2021 10:26:01 +0200
d15d15
Subject: [PATCH 06/10] NetworkPkg/IScsiDxe: assert that IScsiBinToHex() always
d15d15
 succeeds
d15d15
MIME-Version: 1.0
d15d15
Content-Type: text/plain; charset=UTF-8
d15d15
Content-Transfer-Encoding: 8bit
d15d15
d15d15
RH-Author: Laszlo Ersek <lersek@redhat.com>
d15d15
RH-MergeRequest: 3: NetworkPkg/IScsiDxe: fix IScsiHexToBin() security and functionality bugs [rhel-8.4.0.z]
d15d15
RH-Commit: [6/10] b302b99312b327b9bf04ea408c638fa0e366d643
d15d15
RH-Bugzilla: 1956676
d15d15
RH-Acked-by: Philippe Mathieu-Daudé <philmd@redhat.com>
d15d15
d15d15
IScsiBinToHex() is called for encoding:
d15d15
d15d15
- the answer to the target's challenge; that is, CHAP_R;
d15d15
d15d15
- the challenge for the target, in case mutual authentication is enabled;
d15d15
  that is, CHAP_C.
d15d15
d15d15
The initiator controls the size of both blobs, the sizes of their hex
d15d15
encodings are correctly calculated in "RspLen" and "ChallengeLen".
d15d15
Therefore the IScsiBinToHex() calls never fail; assert that.
d15d15
d15d15
Cc: Jiaxin Wu <jiaxin.wu@intel.com>
d15d15
Cc: Maciej Rabeda <maciej.rabeda@linux.intel.com>
d15d15
Cc: Philippe Mathieu-Daudé <philmd@redhat.com>
d15d15
Cc: Siyuan Fu <siyuan.fu@intel.com>
d15d15
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=3356
d15d15
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
d15d15
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
d15d15
Reviewed-by: Maciej Rabeda <maciej.rabeda@linux.intel.com>
d15d15
Upstream: https://bugzilla.tianocore.org/show_bug.cgi?id=3356, c#17...c#22
d15d15
---
d15d15
 NetworkPkg/IScsiDxe/IScsiCHAP.c | 27 +++++++++++++++------------
d15d15
 1 file changed, 15 insertions(+), 12 deletions(-)
d15d15
d15d15
diff --git a/NetworkPkg/IScsiDxe/IScsiCHAP.c b/NetworkPkg/IScsiDxe/IScsiCHAP.c
d15d15
index 9e192ce292..dbe3c8ef46 100644
d15d15
--- a/NetworkPkg/IScsiDxe/IScsiCHAP.c
d15d15
+++ b/NetworkPkg/IScsiDxe/IScsiCHAP.c
d15d15
@@ -391,6 +391,7 @@ IScsiCHAPToSendReq (
d15d15
   UINT32                      RspLen;
d15d15
   CHAR8                       *Challenge;
d15d15
   UINT32                      ChallengeLen;
d15d15
+  EFI_STATUS                  BinToHexStatus;
d15d15
 
d15d15
   ASSERT (Conn->CurrentStage == ISCSI_SECURITY_NEGOTIATION);
d15d15
 
d15d15
@@ -471,12 +472,13 @@ IScsiCHAPToSendReq (
d15d15
     //
d15d15
     // CHAP_R=<R>
d15d15
     //
d15d15
-    IScsiBinToHex (
d15d15
-      (UINT8 *) AuthData->CHAPResponse,
d15d15
-      ISCSI_CHAP_RSP_LEN,
d15d15
-      Response,
d15d15
-      &RspLen
d15d15
-      );
d15d15
+    BinToHexStatus = IScsiBinToHex (
d15d15
+                       (UINT8 *) AuthData->CHAPResponse,
d15d15
+                       ISCSI_CHAP_RSP_LEN,
d15d15
+                       Response,
d15d15
+                       &RspLen
d15d15
+                       );
d15d15
+    ASSERT_EFI_ERROR (BinToHexStatus);
d15d15
     IScsiAddKeyValuePair (Pdu, ISCSI_KEY_CHAP_RESPONSE, Response);
d15d15
 
d15d15
     if (AuthData->AuthConfig->CHAPType == ISCSI_CHAP_MUTUAL) {
d15d15
@@ -490,12 +492,13 @@ IScsiCHAPToSendReq (
d15d15
       // CHAP_C=<C>
d15d15
       //
d15d15
       IScsiGenRandom ((UINT8 *) AuthData->OutChallenge, ISCSI_CHAP_RSP_LEN);
d15d15
-      IScsiBinToHex (
d15d15
-        (UINT8 *) AuthData->OutChallenge,
d15d15
-        ISCSI_CHAP_RSP_LEN,
d15d15
-        Challenge,
d15d15
-        &ChallengeLen
d15d15
-        );
d15d15
+      BinToHexStatus = IScsiBinToHex (
d15d15
+                         (UINT8 *) AuthData->OutChallenge,
d15d15
+                         ISCSI_CHAP_RSP_LEN,
d15d15
+                         Challenge,
d15d15
+                         &ChallengeLen
d15d15
+                         );
d15d15
+      ASSERT_EFI_ERROR (BinToHexStatus);
d15d15
       IScsiAddKeyValuePair (Pdu, ISCSI_KEY_CHAP_CHALLENGE, Challenge);
d15d15
 
d15d15
       Conn->AuthStep = ISCSI_CHAP_STEP_FOUR;
d15d15
-- 
d15d15
2.27.0
d15d15