From 7095d5577ff25bb41ca3171903ac03809cea9f35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20R=C3=BChsen?= Date: Mon, 8 Oct 2018 11:25:23 +0200 Subject: Skip tests/tls13/prf.c if visibility 'protected' doesn't work MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Overriding gnutls_rnd() with visibility 'protected' doesn't always work. E.g. LDFLAGS="-Wl,-Bsymbolic-functions" seems to have priority on Debian derived systems. Fixes #584 Signed-off-by: Tim Rühsen --- .gitlab-ci.yml | 2 +- tests/tls13/prf.c | 9 +++++++++ tests/utils.h | 5 ++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4c7d593cf7..06742b2069 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -464,7 +464,7 @@ Debian.x86_64: script: - ./bootstrap - mkdir -p build && cd build && - dash ../configure --disable-gcc-warnings --cache-file ../cache/config.cache --disable-doc --disable-guile --disable-full-test-suite && + dash ../configure --disable-gcc-warnings --cache-file ../cache/config.cache --disable-doc --disable-guile --disable-full-test-suite LDFLAGS='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now' && make -j$(nproc) && make check -j$(nproc) - cd .. tags: diff --git a/tests/tls13/prf.c b/tests/tls13/prf.c index eb2d0e6096..75daff59d4 100644 --- a/tests/tls13/prf.c +++ b/tests/tls13/prf.c @@ -70,9 +70,13 @@ gnutls_datum_t hrnd = {(void*)"\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ static const gnutls_datum_t hsrnd = {(void*)"\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 32}; +static int gnutls_rnd_works; + int __attribute__ ((visibility ("protected"))) gnutls_rnd(gnutls_rnd_level_t level, void *data, size_t len) { + gnutls_rnd_works = 1; + memset(data, 0xff, len); /* Flip the first byte to avoid infinite loop in the RSA @@ -135,6 +139,11 @@ static void check_prfs(gnutls_session_t session) unsigned char key_material[512]; int ret; + if (!gnutls_rnd_works) { + fprintf(stderr, "gnutls_rnd() could not be overridden, see #584\n"); + exit(77); + } + TRY_OLD(13, "key expansion", 34, (uint8_t*)KEY_EXP_VALUE); TRY_OLD(6, "hello", 31, (uint8_t*)HELLO_VALUE); diff --git a/tests/utils.h b/tests/utils.h index d5409d661d..b905065c52 100644 --- a/tests/utils.h +++ b/tests/utils.h @@ -152,9 +152,12 @@ inline static void _check_wait_status(int status, unsigned sigonly) if (WIFSIGNALED(status)) { fail("Child died with signal %d\n", WTERMSIG(status)); } else { - if (!sigonly) + if (!sigonly) { + if (WEXITSTATUS(status) == 77) + exit(77); fail("Child died with status %d\n", WEXITSTATUS(status)); + } } } #endif -- cgit v1.2.1