fixed a memleak, a static string free, an access of freed memory etc
authorCarlo von lynX <lynX@time.to.get.psyced.org>
Fri, 29 Jul 2016 00:35:41 +0000 (00:35 +0000)
committerCarlo von lynX <lynX@time.to.get.psyced.org>
Fri, 29 Jul 2016 00:35:41 +0000 (00:35 +0000)
contrib/gnunet-logread
src/cadet/gnunet-service-cadet_connection.c
src/cadet/gnunet-service-cadet_peer.c
src/cadet/gnunet-service-cadet_tunnel.c
src/util/socks.c

index f58758cb9aebbf66d1d3ef8e053b52dca8a2f747..5b125a5a459959e078b820273c9260c5744af7e3 100755 (executable)
@@ -45,7 +45,7 @@ if (open HEADER, $filename)
 Could not read $filename for message codes:
        $!.
 Please provide a \$GNUNET_PREFIX environment variable to replace "/usr".
-Try also '$0 -h' for help
+Try also '$0 -h' for help.
 
 X
 }
@@ -186,7 +186,7 @@ the GNUnet system beast.
 That master process is simply an extra gnunet-logread that you run in a
 separate window and adorn it with the '-f' flag. The submitting processes
 instead need to be given a '-n' flag. That is because from the GNUnet logs
-it isn't clear which process events belong too. For example you may be
+it isn't clear which process events belong to. For example you may be
 having events taking place in the 'util' subsystem of gnunet-psyc-service
 just as much as in the 'util' subsystem of gnunet-multicast-service. In
 order to make sense of them it is necessary to manually add that info. This
index 9dfecf0433bc2114d82cf9936d33fdc7ce4aa0e1..babb00d665ca87a0db498c91d5981a7acf59d4fc 100644 (file)
@@ -3482,6 +3482,13 @@ GCC_send_prebuilt_message (const struct GNUNET_MessageHeader *message,
   int droppable;
 
   GCC_check_connections ();
+  fc = fwd ? &c->fwd_fc : &c->bck_fc;
+  if (0 == fc->queue_max)
+  {
+    GNUNET_break (0);
+    return NULL;
+  }
+
   size = ntohs (message->size);
   data = GNUNET_malloc (size);
   GNUNET_memcpy (data, message, size);
@@ -3490,13 +3497,6 @@ GCC_send_prebuilt_message (const struct GNUNET_MessageHeader *message,
        "--> %s (%s %4u) on conn %s (%p) %s [%5u]\n",
        GC_m2s (type), GC_m2s (payload_type), payload_id, GCC_2s (c), c,
        GC_f2s(fwd), size);
-
-  fc = fwd ? &c->fwd_fc : &c->bck_fc;
-  if (0 == fc->queue_max)
-  {
-    GNUNET_break (0);
-    return NULL;
-  }
   droppable = GNUNET_NO == force;
   switch (type)
   {
index e19c3ca48caefe44d5658649d1b7166b7c347bcd..fa338f13fb3283800f5787acb409191047990305 100644 (file)
@@ -787,7 +787,12 @@ peer_destroy (struct CadetPeer *peer)
     GNUNET_ATS_connectivity_suggest_cancel (peer->connectivity_suggestion);
     peer->connectivity_suggestion = NULL;
   }
-  while (NULL != peer->queue_head)
+    /* Following check was 'while' instead of 'if', but GCP_queue_destroy
+     * frees 'peer->queue_head' so the while checks on freed memory.
+     * Not sure if 'if' is what you wanted, but 'while' can't be
+     * correct. --lynX
+     */
+  if (NULL != peer->queue_head)
   {
     GCP_queue_destroy (peer->queue_head, GNUNET_YES, GNUNET_NO, 0);
   }
index bdb8a8ea4905834d4f21e02174070bfa1ee6e79a..565ddf411ef1198234e20568958e4567478f8851 100644 (file)
@@ -4252,6 +4252,7 @@ GCT_send_connection_acks (struct CadetTunnel *t)
     {
       continue;
     }
+    GNUNET_assert(cs != 0);
     allow_per_connection = to_allow/cs;
     to_allow -= allow_per_connection;
     cs--;
index 1525b3c75e51490431f5e0d9724990cbb83b5033..387c2b69802755e5b50db2c5d5de0ce604bc378f 100644 (file)
@@ -575,10 +575,7 @@ GNUNET_SOCKS_do_connect (const char *service_name,
       GNUNET_CONFIGURATION_get_value_number (cfg, service_name, "SOCKSPORT", &port0))
     port0 = 9050;
   /* A typical Tor client should usually try port 9150 for the TBB too, but
-   * GUNNet can probably assume a system Tor instalation. */
-  if (GNUNET_OK !=
-      GNUNET_CONFIGURATION_get_value_string (cfg, service_name, "SOCKSHOST", &host0))
-    host0 = "127.0.0.1";
+   * GUNNet can probably assume a system Tor installation. */
   if (port0 > 65535 || port0 <= 0)
   {
     LOG (GNUNET_ERROR_TYPE_WARNING,
@@ -587,7 +584,6 @@ GNUNET_SOCKS_do_connect (const char *service_name,
         port0,service_name);
     return NULL;
   }
-
   if ((GNUNET_OK !=
        GNUNET_CONFIGURATION_get_value_number (cfg, service_name, "PORT", &port1))
       || (port1 > 65535) || (port1 <= 0) ||
@@ -600,9 +596,11 @@ GNUNET_SOCKS_do_connect (const char *service_name,
         service_name,port1,host1);
     return NULL;
   }
-
-  socks5 = GNUNET_CONNECTION_create_from_connect (cfg, host0, port0);
-  GNUNET_free (host0);
+  if (GNUNET_OK !=
+      GNUNET_CONFIGURATION_get_value_string (cfg, service_name, "SOCKSHOST", &host0))
+    host0 = NULL; /* you don't want to feed a static string to free(), right? */
+  socks5 = GNUNET_CONNECTION_create_from_connect (cfg, host0 || "127.0.0.1", port0);
+  if (host0) GNUNET_free (host0);
 
   /* Sets to NULL if they do not exist */
   GNUNET_CONFIGURATION_get_value_string (cfg, service_name, "SOCKSUSER", &user);