diff mbox

crypto: fix initialization of crypto in tests

Message ID 1475588329-814-1-git-send-email-berrange@redhat.com
State New
Headers show

Commit Message

Daniel P. Berrangé Oct. 4, 2016, 1:38 p.m. UTC
The test-io-channel-tls test was missing a call to qcrypto_init
and test-crypto-hash was initializing it multiple times,

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
---
 tests/test-crypto-hash.c    | 12 ++----------
 tests/test-io-channel-tls.c |  3 +++
 2 files changed, 5 insertions(+), 10 deletions(-)

Comments

Dr. David Alan Gilbert Oct. 4, 2016, 3:21 p.m. UTC | #1
* Daniel P. Berrange (berrange@redhat.com) wrote:
> The test-io-channel-tls test was missing a call to qcrypto_init
> and test-crypto-hash was initializing it multiple times,
> 
> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>

I still seem to have a failure on rhel6 with this; but not everytime,
maybe it's passing 10-20%ish ?

Dave

GTESTER tests/test-io-channel-tls
test-io-channel-tls: ath.c:193: _gcry_ath_mutex_lock: Assertion `*lock == ((ath_mutex_t) 0)' failed.
GTester: last random seed: R02S804c19865af34376817b500c2a170214

#12 0x00007ffff66cd186 in ?? () from /usr/lib64/libgnutls.so.26
#13 0x00007ffff66ca546 in _gnutls_recv_int () from /usr/lib64/libgnutls.so.26
#14 0x00007ffff7f75f8d in qcrypto_tls_session_read (session=<value optimized out>, buf=<value optimized out>,
    len=<value optimized out>) at /root/hmp/qemu/crypto/tlssession.c:420
#15 0x00007ffff7f6d5e7 in qio_channel_tls_readv (ioc=<value optimized out>, iov=<value optimized out>, niov=250,
    fds=<value optimized out>, nfds=<value optimized out>, errp=0x7ffff837a850)
    at /root/hmp/qemu/io/channel-tls.c:249
#16 0x00007ffff7f686ca in test_io_thread_reader (opaque=0x7ffff837a800)
    at /root/hmp/qemu/tests/io-channel-helpers.c:129
#17 0x00007ffff7459374 in ?? () from /lib64/libglib-2.0.so.0
#18 0x00007ffff5afbaa1 in start_thread () from /lib64/libpthread.so.0
#19 0x00007ffff5848aad in clone () from /lib64/libc.so.6

> ---
>  tests/test-crypto-hash.c    | 12 ++----------
>  tests/test-io-channel-tls.c |  3 +++
>  2 files changed, 5 insertions(+), 10 deletions(-)
> 
> diff --git a/tests/test-crypto-hash.c b/tests/test-crypto-hash.c
> index 42fc77a..214a9f7 100644
> --- a/tests/test-crypto-hash.c
> +++ b/tests/test-crypto-hash.c
> @@ -89,8 +89,6 @@ static void test_hash_alloc(void)
>  {
>      size_t i;
>  
> -    g_assert(qcrypto_init(NULL) == 0);
> -
>      for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
>          uint8_t *result = NULL;
>          size_t resultlen = 0;
> @@ -123,8 +121,6 @@ static void test_hash_prealloc(void)
>  {
>      size_t i;
>  
> -    g_assert(qcrypto_init(NULL) == 0);
> -
>      for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
>          uint8_t *result;
>          size_t resultlen;
> @@ -161,8 +157,6 @@ static void test_hash_iov(void)
>  {
>      size_t i;
>  
> -    g_assert(qcrypto_init(NULL) == 0);
> -
>      for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
>          struct iovec iov[3] = {
>              { .iov_base = (char *)INPUT_TEXT1, .iov_len = strlen(INPUT_TEXT1) },
> @@ -199,8 +193,6 @@ static void test_hash_digest(void)
>  {
>      size_t i;
>  
> -    g_assert(qcrypto_init(NULL) == 0);
> -
>      for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
>          int ret;
>          char *digest;
> @@ -230,8 +222,6 @@ static void test_hash_base64(void)
>  {
>      size_t i;
>  
> -    g_assert(qcrypto_init(NULL) == 0);
> -
>      for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
>          int ret;
>          char *digest;
> @@ -253,6 +243,8 @@ static void test_hash_base64(void)
>  
>  int main(int argc, char **argv)
>  {
> +    g_assert(qcrypto_init(NULL) == 0);
> +
>      g_test_init(&argc, &argv, NULL);
>      g_test_add_func("/crypto/hash/iov", test_hash_iov);
>      g_test_add_func("/crypto/hash/alloc", test_hash_alloc);
> diff --git a/tests/test-io-channel-tls.c b/tests/test-io-channel-tls.c
> index 3c361a7..bd3ae2b 100644
> --- a/tests/test-io-channel-tls.c
> +++ b/tests/test-io-channel-tls.c
> @@ -27,6 +27,7 @@
>  #include "io/channel-tls.h"
>  #include "io/channel-socket.h"
>  #include "io-channel-helpers.h"
> +#include "crypto/init.h"
>  #include "crypto/tlscredsx509.h"
>  #include "qemu/acl.h"
>  #include "qom/object_interfaces.h"
> @@ -265,6 +266,8 @@ int main(int argc, char **argv)
>  {
>      int ret;
>  
> +    g_assert(qcrypto_init(NULL) == 0);
> +
>      module_call_init(MODULE_INIT_QOM);
>      g_test_init(&argc, &argv, NULL);
>      setenv("GNUTLS_FORCE_FIPS_MODE", "2", 1);
> -- 
> 2.7.4
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
Daniel P. Berrangé Oct. 4, 2016, 4:39 p.m. UTC | #2
On Tue, Oct 04, 2016 at 04:21:03PM +0100, Dr. David Alan Gilbert wrote:
> * Daniel P. Berrange (berrange@redhat.com) wrote:
> > The test-io-channel-tls test was missing a call to qcrypto_init
> > and test-crypto-hash was initializing it multiple times,
> > 
> > Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> 
> I still seem to have a failure on rhel6 with this; but not everytime,
> maybe it's passing 10-20%ish ?
> 
> Dave
> 
> GTESTER tests/test-io-channel-tls
> test-io-channel-tls: ath.c:193: _gcry_ath_mutex_lock: Assertion `*lock == ((ath_mutex_t) 0)' failed.
> GTester: last random seed: R02S804c19865af34376817b500c2a170214
> 
> #12 0x00007ffff66cd186 in ?? () from /usr/lib64/libgnutls.so.26
> #13 0x00007ffff66ca546 in _gnutls_recv_int () from /usr/lib64/libgnutls.so.26
> #14 0x00007ffff7f75f8d in qcrypto_tls_session_read (session=<value optimized out>, buf=<value optimized out>,
>     len=<value optimized out>) at /root/hmp/qemu/crypto/tlssession.c:420
> #15 0x00007ffff7f6d5e7 in qio_channel_tls_readv (ioc=<value optimized out>, iov=<value optimized out>, niov=250,
>     fds=<value optimized out>, nfds=<value optimized out>, errp=0x7ffff837a850)
>     at /root/hmp/qemu/io/channel-tls.c:249
> #16 0x00007ffff7f686ca in test_io_thread_reader (opaque=0x7ffff837a800)
>     at /root/hmp/qemu/tests/io-channel-helpers.c:129
> #17 0x00007ffff7459374 in ?? () from /lib64/libglib-2.0.so.0
> #18 0x00007ffff5afbaa1 in start_thread () from /lib64/libpthread.so.0
> #19 0x00007ffff5848aad in clone () from /lib64/libc.so.6

Ok, I've found a second bug - we need to reverse the order of some
initialization calls in qcrypto_init() too. This patch here is still
needed, but i'll send a additional one too.

> 
> > ---
> >  tests/test-crypto-hash.c    | 12 ++----------
> >  tests/test-io-channel-tls.c |  3 +++
> >  2 files changed, 5 insertions(+), 10 deletions(-)
> > 
> > diff --git a/tests/test-crypto-hash.c b/tests/test-crypto-hash.c
> > index 42fc77a..214a9f7 100644
> > --- a/tests/test-crypto-hash.c
> > +++ b/tests/test-crypto-hash.c
> > @@ -89,8 +89,6 @@ static void test_hash_alloc(void)
> >  {
> >      size_t i;
> >  
> > -    g_assert(qcrypto_init(NULL) == 0);
> > -
> >      for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
> >          uint8_t *result = NULL;
> >          size_t resultlen = 0;
> > @@ -123,8 +121,6 @@ static void test_hash_prealloc(void)
> >  {
> >      size_t i;
> >  
> > -    g_assert(qcrypto_init(NULL) == 0);
> > -
> >      for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
> >          uint8_t *result;
> >          size_t resultlen;
> > @@ -161,8 +157,6 @@ static void test_hash_iov(void)
> >  {
> >      size_t i;
> >  
> > -    g_assert(qcrypto_init(NULL) == 0);
> > -
> >      for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
> >          struct iovec iov[3] = {
> >              { .iov_base = (char *)INPUT_TEXT1, .iov_len = strlen(INPUT_TEXT1) },
> > @@ -199,8 +193,6 @@ static void test_hash_digest(void)
> >  {
> >      size_t i;
> >  
> > -    g_assert(qcrypto_init(NULL) == 0);
> > -
> >      for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
> >          int ret;
> >          char *digest;
> > @@ -230,8 +222,6 @@ static void test_hash_base64(void)
> >  {
> >      size_t i;
> >  
> > -    g_assert(qcrypto_init(NULL) == 0);
> > -
> >      for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
> >          int ret;
> >          char *digest;
> > @@ -253,6 +243,8 @@ static void test_hash_base64(void)
> >  
> >  int main(int argc, char **argv)
> >  {
> > +    g_assert(qcrypto_init(NULL) == 0);
> > +
> >      g_test_init(&argc, &argv, NULL);
> >      g_test_add_func("/crypto/hash/iov", test_hash_iov);
> >      g_test_add_func("/crypto/hash/alloc", test_hash_alloc);
> > diff --git a/tests/test-io-channel-tls.c b/tests/test-io-channel-tls.c
> > index 3c361a7..bd3ae2b 100644
> > --- a/tests/test-io-channel-tls.c
> > +++ b/tests/test-io-channel-tls.c
> > @@ -27,6 +27,7 @@
> >  #include "io/channel-tls.h"
> >  #include "io/channel-socket.h"
> >  #include "io-channel-helpers.h"
> > +#include "crypto/init.h"
> >  #include "crypto/tlscredsx509.h"
> >  #include "qemu/acl.h"
> >  #include "qom/object_interfaces.h"
> > @@ -265,6 +266,8 @@ int main(int argc, char **argv)
> >  {
> >      int ret;
> >  
> > +    g_assert(qcrypto_init(NULL) == 0);
> > +
> >      module_call_init(MODULE_INIT_QOM);
> >      g_test_init(&argc, &argv, NULL);
> >      setenv("GNUTLS_FORCE_FIPS_MODE", "2", 1);
> > -- 
> > 2.7.4
> > 
> --
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK

Regards,
Daniel
Eric Blake Oct. 4, 2016, 8:24 p.m. UTC | #3
On 10/04/2016 08:38 AM, Daniel P. Berrange wrote:
> The test-io-channel-tls test was missing a call to qcrypto_init
> and test-crypto-hash was initializing it multiple times,
> 
> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> ---
>  tests/test-crypto-hash.c    | 12 ++----------
>  tests/test-io-channel-tls.c |  3 +++
>  2 files changed, 5 insertions(+), 10 deletions(-)

Reviewed-by: Eric Blake <eblake@redhat.com>
diff mbox

Patch

diff --git a/tests/test-crypto-hash.c b/tests/test-crypto-hash.c
index 42fc77a..214a9f7 100644
--- a/tests/test-crypto-hash.c
+++ b/tests/test-crypto-hash.c
@@ -89,8 +89,6 @@  static void test_hash_alloc(void)
 {
     size_t i;
 
-    g_assert(qcrypto_init(NULL) == 0);
-
     for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
         uint8_t *result = NULL;
         size_t resultlen = 0;
@@ -123,8 +121,6 @@  static void test_hash_prealloc(void)
 {
     size_t i;
 
-    g_assert(qcrypto_init(NULL) == 0);
-
     for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
         uint8_t *result;
         size_t resultlen;
@@ -161,8 +157,6 @@  static void test_hash_iov(void)
 {
     size_t i;
 
-    g_assert(qcrypto_init(NULL) == 0);
-
     for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
         struct iovec iov[3] = {
             { .iov_base = (char *)INPUT_TEXT1, .iov_len = strlen(INPUT_TEXT1) },
@@ -199,8 +193,6 @@  static void test_hash_digest(void)
 {
     size_t i;
 
-    g_assert(qcrypto_init(NULL) == 0);
-
     for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
         int ret;
         char *digest;
@@ -230,8 +222,6 @@  static void test_hash_base64(void)
 {
     size_t i;
 
-    g_assert(qcrypto_init(NULL) == 0);
-
     for (i = 0; i < G_N_ELEMENTS(expected_outputs) ; i++) {
         int ret;
         char *digest;
@@ -253,6 +243,8 @@  static void test_hash_base64(void)
 
 int main(int argc, char **argv)
 {
+    g_assert(qcrypto_init(NULL) == 0);
+
     g_test_init(&argc, &argv, NULL);
     g_test_add_func("/crypto/hash/iov", test_hash_iov);
     g_test_add_func("/crypto/hash/alloc", test_hash_alloc);
diff --git a/tests/test-io-channel-tls.c b/tests/test-io-channel-tls.c
index 3c361a7..bd3ae2b 100644
--- a/tests/test-io-channel-tls.c
+++ b/tests/test-io-channel-tls.c
@@ -27,6 +27,7 @@ 
 #include "io/channel-tls.h"
 #include "io/channel-socket.h"
 #include "io-channel-helpers.h"
+#include "crypto/init.h"
 #include "crypto/tlscredsx509.h"
 #include "qemu/acl.h"
 #include "qom/object_interfaces.h"
@@ -265,6 +266,8 @@  int main(int argc, char **argv)
 {
     int ret;
 
+    g_assert(qcrypto_init(NULL) == 0);
+
     module_call_init(MODULE_INIT_QOM);
     g_test_init(&argc, &argv, NULL);
     setenv("GNUTLS_FORCE_FIPS_MODE", "2", 1);