1
1

tests: Fix segfault with mbedTLS built without threading support

torture_rand and torture_server_x11 call ssh_init without checking
the return value. If mbedTLS is built without threading support
ssh_init fails but the tests continue and then segfault since threading
wasn't correctly initialised.

Add a section that documents requirements for mbedTLS usage in a
multi threaded environment to README.mbedtls.

Signed-off-by: Juraj Vijtiuk <juraj.vijtiuk@sartura.hr>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Этот коммит содержится в:
jvijtiuk 2018-02-12 18:01:48 +01:00 коммит произвёл Andreas Schneider
родитель ebcff9fd63
Коммит 963111b836
3 изменённых файлов: 26 добавлений и 2 удалений

Просмотреть файл

@ -1,3 +1,6 @@
libssh mbedTLS ECDSA support
=============================
When built with mbedTLS, libssh currently does not support ECDSA key comparison.
Since the comparison function is used during the verification of publickey
authentication requests a libssh server will not be able to deal with ECDSA
@ -5,3 +8,16 @@ keys.
In general, if the ssh_key_cmp function is used with mbedTLS, ECDSA key
comparison won't work.
mbedTLS and libssh in multithreaded applications
==================================================
To use libssh with mbedTLS in a multithreaded application, mbedTLS has to be
built with threading support enabled.
If threading support is not available and multi threading is used, ssh_init
will fail.
More information about building mbedTLS with threading support can be found
in the mbedTLS documentation.

Просмотреть файл

@ -17,9 +17,13 @@
static int setup(void **state) {
(void) state;
int rc;
ssh_threads_set_callbacks(ssh_threads_get_pthread());
ssh_init();
rc = ssh_init();
if (rc != SSH_OK) {
return -1;
}
return 0;
}

Просмотреть файл

@ -21,9 +21,13 @@ struct hostkey_state {
static int setup(void **state) {
struct hostkey_state *h;
mode_t mask;
int rc;
ssh_threads_set_callbacks(ssh_threads_get_pthread());
ssh_init();
rc = ssh_init();
if (rc != SSH_OK) {
return -1;
}
h = malloc(sizeof(struct hostkey_state));
assert_non_null(h);