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

9e1c84
From 1e6a8c43241febbec56ffc2141c55d8de34e13e6 Mon Sep 17 00:00:00 2001
d15d15
From: Laszlo Ersek <lersek@redhat.com>
9e1c84
Date: Tue, 8 Jun 2021 14:12:55 +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>
9e1c84
RH-MergeRequest: 5: NetworkPkg/IScsiDxe: fix IScsiHexToBin() security and functionality bugs [rhel-8.5.0, post-rebase]
9e1c84
RH-Commit: [6/10] 2f697819ce0731f99f95f29a3b30c777b754db37
9e1c84
RH-Bugzilla: 1956408
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>
9e1c84
Message-Id: <20210608121259.32451-7-lersek@redhat.com>
9e1c84
(cherry picked from commit d90fff40cb2502b627370a77f5608c8a178c3f78)
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