+        return TSS2_TCTI_RC_BAD_VALUE; +    } +    *handle = dlopen(file_xfrm, RTLD_NOW); <del> if (*handle != NULL) { return TSS2_RC_SUCCESS; } else { @@ -94,7 +102,7 @@ handle_from_name(const char *file, /* 'name' alone didn't work, try libtss2-tcti-<name>.so.0 */ size = snprintf(file_xfrm, sizeof (file_xfrm), -                    TCTI_NAME_TEMPLATE_0, </del> <ins> +    if (*handle != NULL) { +        return TSS2_RC_SUCCESS; +    } else { +        LOG_DEBUG("Could not load TCTI file: "%s": %s", file, dlerror()); +    } +    /* 'name' alone didn't work, try libtss2-tcti-<name>.so.0 */ +    size = snprintf(file_xfrm, +                    sizeof (file_xfrm), </ins> +                    "@PREFIX@" TCTI_NAME_TEMPLATE_0, <del> file); if (size >= sizeof (file_xfrm)) { LOG_ERROR("TCTI name truncated in transform."); @@ -109,7 +117,7 @@ handle_from_name(const char *file, /* libtss2-tcti-<name>.so.0 didn't work, try libtss2-tcti-<name>.so */ size = snprintf(file_xfrm, sizeof (file_xfrm), -                    TCTI_NAME_TEMPLATE, </del> <ins> +                    file); +    if (size >= sizeof (file_xfrm)) { +        LOG_ERROR("TCTI name truncated in transform."); +        return TSS2_TCTI_RC_BAD_VALUE; +    } +    *handle = dlopen(file_xfrm, RTLD_NOW); +    if (*handle != NULL) { +        return TSS2_RC_SUCCESS; +    } else { +        LOG_DEBUG("Could not load TCTI file "%s": %s", file, dlerror()); +    } +    /* libtss2-tcti-<name>.so.0 didn't work, try libtss2-tcti-<name>.so */ +    size = snprintf(file_xfrm, +                    sizeof (file_xfrm), </ins> +                    "@PREFIX@" TCTI_NAME_TEMPLATE, <del> file); if (size >= sizeof (file_xfrm)) { LOG_ERROR("TCTI name truncated in transform."); </del> <ins> +                    file); +    if (size >= sizeof (file_xfrm)) { +        LOG_ERROR("TCTI name truncated in transform."); +        return TSS2_TCTI_RC_BAD_VALUE; +    } +    *handle = dlopen(file_xfrm, RTLD_NOW); if (*handle == NULL) { LOG_DEBUG("Failed to load TCTI for name "%s": %s", file, dlerror()); return TSS2_TCTI_RC_NOT_SUPPORTED; diff --git a/test/unit/tctildr-dl.c b/test/unit/tctildr-dl.c index 873a4531..c17b939e 100644 --- a/test/unit/tctildr-dl.c +++ b/test/unit/tctildr-dl.c @@ -223,6 +223,18 @@ test_get_info_default_success (void **state) expect_value(__wrap_dlopen, flags, RTLD_NOW); will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-default.so"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); + +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-default.so.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); + +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-default.so.so"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); + expect_string(__wrap_dlopen, filename, "libtss2-tcti-tabrmd.so.0"); expect_value(__wrap_dlopen, flags, RTLD_NOW); will_return(__wrap_dlopen, HANDLE); @@ -255,6 +267,18 @@ test_get_info_default_info_fail (void **state) expect_value(__wrap_dlopen, flags, RTLD_NOW); will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-default.so"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); + +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-default.so.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); + +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-default.so.so"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); + expect_string(__wrap_dlopen, filename, "libtss2-tcti-tabrmd.so.0"); expect_value(__wrap_dlopen, flags, RTLD_NOW); will_return(__wrap_dlopen, HANDLE); @@ -407,6 +431,15 @@ test_tcti_fail_all (void **state) expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-default.so.so"); expect_value(__wrap_dlopen, flags, RTLD_NOW); will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-default.so"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-default.so.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-default.so.so"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); /* Skip over libtss2-tcti-tabrmd.so */ expect_string(__wrap_dlopen, filename, "libtss2-tcti-tabrmd.so.0"); @@ -418,6 +451,15 @@ test_tcti_fail_all (void **state) expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-tabrmd.so.0.so"); expect_value(__wrap_dlopen, flags, RTLD_NOW); will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-tabrmd.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-tabrmd.so.0.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-tabrmd.so.0.so"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); /* Skip over libtss2-tcti-device.so, /dev/tpmrm0 */ expect_string(__wrap_dlopen, filename, "libtss2-tcti-device.so.0"); @@ -429,6 +471,15 @@ test_tcti_fail_all (void **state) expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-device.so.0.so"); expect_value(__wrap_dlopen, flags, RTLD_NOW); will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-device.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-device.so.0.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-device.so.0.so"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); /* Skip over libtss2-tcti-device.so, /dev/tpm0 */ expect_string(__wrap_dlopen, filename, "libtss2-tcti-device.so.0"); @@ -440,6 +491,15 @@ test_tcti_fail_all (void **state) expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-device.so.0.so"); expect_value(__wrap_dlopen, flags, RTLD_NOW); will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-device.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-device.so.0.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-device.so.0.so"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); /* Skip over libtss2-tcti-swtpm.so */ expect_string(__wrap_dlopen, filename, "libtss2-tcti-swtpm.so.0"); @@ -451,6 +511,15 @@ test_tcti_fail_all (void **state) expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-swtpm.so.0.so"); expect_value(__wrap_dlopen, flags, RTLD_NOW); will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-swtpm.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-swtpm.so.0.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-swtpm.so.0.so"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); /* Skip over libtss2-tcti-mssim.so */ expect_string(__wrap_dlopen, filename, "libtss2-tcti-mssim.so.0"); @@ -462,6 +531,15 @@ test_tcti_fail_all (void **state) expect_string(__wrap_dlopen, filename, "libtss2-tcti-libtss2-tcti-mssim.so.0.so"); expect_value(__wrap_dlopen, flags, RTLD_NOW); will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-mssim.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-mssim.so.0.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-libtss2-tcti-mssim.so.0.so"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); TSS2_RC r; TSS2_TCTI_CONTEXT *tcti; @@ -490,6 +568,15 @@ test_info_from_name_handle_fail (void **state) expect_string(__wrap_dlopen, filename, "libtss2-tcti-foo.so"); expect_value(__wrap_dlopen, flags, RTLD_NOW); will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/foo"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-foo.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-foo.so"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); TSS2_RC rc = info_from_name ("foo", &info, &data); assert_int_equal (rc, TSS2_TCTI_RC_NOT_SUPPORTED); @@ -606,6 +693,15 @@ test_tctildr_get_info_from_name (void **state) expect_string(__wrap_dlopen, filename, "libtss2-tcti-foo.so"); expect_value(__wrap_dlopen, flags, RTLD_NOW); will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/foo"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-foo.so.0"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); +    expect_string(__wrap_dlopen, filename, "@PREFIX@/libtss2-tcti-foo.so"); +    expect_value(__wrap_dlopen, flags, RTLD_NOW); +    will_return(__wrap_dlopen, NULL); TSS2_RC rc = tctildr_get_info ("foo", &info, &data); assert_int_equal (rc, TSS2_TCTI_RC_NOT_SUPPORTED); </ins>