summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Rühsen <tim.ruehsen@gmx.de>2018-10-08 11:25:23 +0200
committerTim Rühsen <tim.ruehsen@gmx.de>2018-10-08 15:15:47 +0200
commit7095d5577ff25bb41ca3171903ac03809cea9f35 (patch)
tree999028229f570e68e6266c3c3a96423ecb7eb5c5
parent42cc349feba90ab37143937a9165d3d87a2a5927 (diff)
downloadgnutls-tmp-fix-584.tar.gz
Skip tests/tls13/prf.c if visibility 'protected' doesn't worktmp-fix-584
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 <tim.ruehsen@gmx.de>
-rw-r--r--.gitlab-ci.yml2
-rw-r--r--tests/tls13/prf.c9
-rw-r--r--tests/utils.h5
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