diff --git a/tests/tests/keystore/src/android/keystore/cts/BlockCipherTestBase.java b/tests/tests/keystore/src/android/keystore/cts/BlockCipherTestBase.java
index 076696d..be2ecc5 100644
--- a/tests/tests/keystore/src/android/keystore/cts/BlockCipherTestBase.java
+++ b/tests/tests/keystore/src/android/keystore/cts/BlockCipherTestBase.java
@@ -27,6 +27,8 @@
 
 import android.keystore.cts.util.EmptyArray;
 import android.keystore.cts.util.TestUtils;
+import android.os.Build;
+import android.os.SystemProperties;
 import android.security.keystore.KeyProperties;
 import android.security.keystore.KeyProtection;
 
@@ -34,8 +36,12 @@
 
 import junit.framework.AssertionFailedError;
 
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
 import java.io.ByteArrayOutputStream;
-import java.nio.Buffer;
 import java.nio.ByteBuffer;
 import java.security.AlgorithmParameters;
 import java.security.InvalidAlgorithmParameterException;
@@ -62,11 +68,6 @@
 import javax.crypto.spec.IvParameterSpec;
 import javax.crypto.spec.SecretKeySpec;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
 @RunWith(AndroidJUnit4.class)
 abstract class BlockCipherTestBase {
 
@@ -724,6 +725,11 @@
             assertEquals(getBlockSize(), output.length);
         } catch (NullPointerException e) {
             if (isStrongbox() && output == null) {
+                if (Build.VERSION_CODES.TIRAMISU
+                        > SystemProperties.getInt("ro.vendor.api_level", 0)) {
+                    // Known broken on some older vendor implementations.
+                    return;
+                }
                 fail("b/194134359");
             }
             throw e;
@@ -838,17 +844,26 @@
                 byte[] output = update(new byte[] {plaintext[plaintextIndex]});
                 if ((plaintextIndex % blockSize) == blockSize - 1) {
                     String additionalInformation = "";
+                    boolean compareOutput = true;
                     if (isStrongbox() && output == null) {
-                        additionalInformation = " (b/194134359)";
+                        // This is known to be broken on older vendor implementations.
+                        if (Build.VERSION_CODES.TIRAMISU
+                                > SystemProperties.getInt("ro.vendor.api_level", 0)) {
+                            compareOutput = false;
+                        } else {
+                            additionalInformation = " (b/194134359)";
+                        }
                     }
-                    // Cipher.update is expected to have output a new block
-                    assertArrayEquals(
-                            "plaintext index: " + plaintextIndex + additionalInformation,
-                            subarray(
-                                    expectedCiphertext,
-                                    ciphertextIndex,
-                                    ciphertextIndex + blockSize),
-                            output);
+                    if (compareOutput) {
+                        // Cipher.update is expected to have output a new block
+                        assertArrayEquals(
+                                "plaintext index: " + plaintextIndex + additionalInformation,
+                                subarray(
+                                        expectedCiphertext,
+                                        ciphertextIndex,
+                                        ciphertextIndex + blockSize),
+                                output);
+                    }
                 } else {
                     // Cipher.update is expected to have produced no output
                     assertArrayEquals("plaintext index: " + plaintextIndex, null, output);
@@ -930,13 +945,23 @@
 
                 if (outputExpected) {
                     String additionalInformation = "";
+                    boolean compareOutput = true;
                     if (isStrongbox()) {
-                        additionalInformation = " (b/194134040)";
+                        // This is known to be broken on older vendor implementations.
+                        if (Build.VERSION_CODES.TIRAMISU
+                                > SystemProperties.getInt("ro.vendor.api_level", 0)) {
+                            compareOutput = false;
+                        } else {
+                            additionalInformation = " (b/194134040)";
+                        }
                     }
-                    assertArrayEquals(
-                            "ciphertext index: " + ciphertextIndex + additionalInformation,
-                            subarray(expectedPlaintext, plaintextIndex, plaintextIndex + blockSize),
-                            output);
+                    if (compareOutput) {
+                        assertArrayEquals(
+                                "ciphertext index: " + ciphertextIndex + additionalInformation,
+                                subarray(expectedPlaintext, plaintextIndex,
+                                    plaintextIndex + blockSize),
+                                output);
+                    }
                 } else {
                     assertEquals("ciphertext index: " + ciphertextIndex, null, output);
                 }
