diff --git a/.ci/docker.run b/.ci/docker.run index c45c8ad52..8d214dd0b 100755 --- a/.ci/docker.run +++ b/.ci/docker.run @@ -94,7 +94,7 @@ fi if [ "$SCANBUILD" == "yes" ]; then scan-build --status-bugs make -j elif [ "$CC" == "clang" ]; then - make -j distcheck + make -j distcheck V=1 else make -j check fi diff --git a/src/tss2-esys/api/Esys_GetRandom.c b/src/tss2-esys/api/Esys_GetRandom.c index fb00e65b5..0be435fb9 100644 --- a/src/tss2-esys/api/Esys_GetRandom.c +++ b/src/tss2-esys/api/Esys_GetRandom.c @@ -7,7 +7,6 @@ #ifdef HAVE_CONFIG_H #include "config.h" // IWYU pragma: keep #endif - #include // for PRIx32, PRIx16, int32_t #include // for NULL, calloc @@ -254,6 +253,7 @@ Esys_GetRandom_Finish( } /* This block handle the resubmission of TPM commands given a certain set of * TPM response codes. */ + LOG_ERROR("XXX Test return code %x", r); if (r == TPM2_RC_RETRY || r == TPM2_RC_TESTING || r == TPM2_RC_YIELDED) { LOG_DEBUG("TPM returned RETRY, TESTING or YIELDED, which triggers a " "resubmission: %" PRIx32, r); diff --git a/test/integration/esys-cp-hash.int.c b/test/integration/esys-cp-hash.int.c index d1e69c593..45686f5cf 100644 --- a/test/integration/esys-cp-hash.int.c +++ b/test/integration/esys-cp-hash.int.c @@ -8,6 +8,9 @@ #include "config.h" // IWYU pragma: keep #endif +#include +#include + #include // for free, NULL, EXIT_FAILURE, EXIT_SUCCESS #include "tss2_common.h" // for BYTE, TSS2_RC @@ -19,6 +22,38 @@ #define base_rc(r) ((r) & ~TSS2_RC_LAYER_MASK) + +int is_ubuntu_2204() { + FILE *file = fopen("/etc/os-release", "r"); + if (!file) { + perror("Failed to open /etc/os-release"); + return 0; // Could not determine OS + } + + char line[256]; + int is_ubuntu = 0; + int is_2204 = 0; + + while (fgets(line, sizeof(line), file)) { + // Check for "Ubuntu" + if (strstr(line, "ID=ubuntu")) { + is_ubuntu = 1; + } + // Check for "22.04" + if (strstr(line, "VERSION_ID=\"22.04\"")) { + is_2204 = 1; + } + // If both conditions are met, break early + if (is_ubuntu && is_2204) { + break; + } + } + + fclose(file); + return is_ubuntu && is_2204; // Return 1 if both conditions are true, 0 otherwise +} + + /** Test the ESYS function Esys_GetRandom. * * Tested ESYS commands: @@ -98,7 +133,9 @@ test_esyscp_hash(ESYS_CONTEXT * esys_context) free(cp_hash); r = Esys_GetRandom_Finish(esys_context, &randomBytes); - while (r == TSS2_ESYS_RC_TRY_AGAIN) { + LOG_ERROR("XXX Test return code2 %x", r); + while (base_rc(r) == TSS2_BASE_RC_TRY_AGAIN) { + // while (r == TSS2_ESYS_RC_TRY_AGAIN) { r = Esys_GetRandom_Finish(esys_context, &randomBytes); } if (r != TPM2_RC_SUCCESS) { @@ -154,8 +191,10 @@ test_esyscp_hash(ESYS_CONTEXT * esys_context) if (r != TPM2_RC_SUCCESS) { LOG_ERROR("FlushContext FAILED! Response Code : 0x%x", r); } - - return EXIT_SUCCESS; + if (is_ubuntu_2204()) + return EXIT_FAILURE; + else + return EXIT_SUCCESS; error_cleansession: r = Esys_FlushContext(esys_context, session);