third_party/tpm2: fix bound checks

BUG=b:260626924
TEST=TCG tests on Cr50 / Simulator

Change-Id: I832db548fe8f887edb79b37b0ec54ea29cf4adb1
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/tpm2/+/4064430
Commit-Queue: Vadim Bendebury <vbendeb@chromium.org>
Auto-Submit: Vadim Sukhomlinov <sukhomlinov@chromium.org>
Commit-Queue: Vadim Sukhomlinov <sukhomlinov@chromium.org>
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-by: Nick Peterson <nrpeter@google.com>
Reviewed-by: Mary Ruthven <mruthven@chromium.org>
Reviewed-by: Vadim Sukhomlinov <sukhomlinov@chromium.org>
Code-Coverage: Vadim Sukhomlinov <sukhomlinov@chromium.org>
Tested-by: Vadim Sukhomlinov <sukhomlinov@chromium.org>
diff --git a/CryptUtil.c b/CryptUtil.c
index bf9263e..2aa3941 100644
--- a/CryptUtil.c
+++ b/CryptUtil.c
@@ -2745,6 +2745,10 @@
    TPM2B_HMAC_KEY          key;            // decryption key
    UINT32                  cipherSize = 0; // size of cipher text
    pAssert(session->sessionKey.t.size + extraKey->t.size <= sizeof(key.t.buffer));
+
+   if (bufferSize < leadingSizeInByte)
+       return TPM_RC_INSUFFICIENT;
+
    // Retrieve encrypted data size.
    if(leadingSizeInByte == 2)
    {
@@ -2752,6 +2756,7 @@
        // data to be decrypted
        cipherSize = (UINT32)BYTE_ARRAY_TO_UINT16(buffer);
        buffer = &buffer[2];    // advance the buffer
+       bufferSize -= 2;
    }
 #ifdef TPM4B
    else if(leadingSizeInByte == 4)
@@ -2759,6 +2764,7 @@
        // the leading size is four bytes so get the four byte size field
        cipherSize = BYTE_ARRAY_TO_UINT32(buffer);
        buffer = &buffer[4];    //advance pointer
+       bufferSize -= 4;
    }
 #endif
    else