network plugin, libcollectdclient: Check return value of gcry_control().
authorFlorian Forster <octo@collectd.org>
Mon, 25 Jul 2016 11:39:37 +0000 (13:39 +0200)
committerFlorian Forster <octo@collectd.org>
Mon, 25 Jul 2016 11:42:16 +0000 (13:42 +0200)
Fixes: #1665

src/libcollectdclient/network_buffer.c
src/network.c

index 61c7c22..ee6857a 100644 (file)
@@ -134,13 +134,16 @@ static _Bool have_gcrypt (void) /* {{{ */
 
 #if HAVE_LIBGCRYPT
 # if GCRYPT_VERSION_NUMBER < 0x010600
-  gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
+  if (gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread))
+    return (0);
 # endif
 
   if (!gcry_check_version (GCRYPT_VERSION))
     return (0);
 
-  gcry_control (GCRYCTL_INIT_SECMEM, 32768, 0);
+  if (!gcry_control (GCRYCTL_INIT_SECMEM, 32768, 0))
+    return (0);
+
   gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
 
   result = 1;
index 5c7761d..b347f4a 100644 (file)
@@ -498,6 +498,8 @@ static int network_dispatch_notification (notification_t *n) /* {{{ */
 #if HAVE_LIBGCRYPT
 static void network_init_gcrypt (void) /* {{{ */
 {
+  gcry_error_t err;
+
   /* http://lists.gnupg.org/pipermail/gcrypt-devel/2003-August/000458.html
    * Because you can't know in a library whether another library has
    * already initialized the library */
@@ -512,10 +514,23 @@ static void network_init_gcrypt (void) /* {{{ */
   *
   * tl;dr: keep all these gry_* statements in this exact order please. */
 # if GCRYPT_VERSION_NUMBER < 0x010600
-  gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
+  err = gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
+  if (err)
+  {
+    ERROR ("network plugin: gcry_control (GCRYCTL_SET_THREAD_CBS) failed: %s", gcry_strerror (err));
+    abort ();
+  }
 # endif
+
   gcry_check_version (NULL);
-  gcry_control (GCRYCTL_INIT_SECMEM, 32768);
+
+  err = gcry_control (GCRYCTL_INIT_SECMEM, 32768);
+  if (err)
+  {
+    ERROR ("network plugin: gcry_control (GCRYCTL_SET_THREAD_CBS) failed: %s", gcry_strerror (err));
+    abort ();
+  }
+
   gcry_control (GCRYCTL_INITIALIZATION_FINISHED);
 } /* }}} void network_init_gcrypt */