From 044664df721c7c0be86c25c2548338154feedb9b Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 22 May 2015 09:20:27 +0000 Subject: -fix assertion: channel could be NULL (especially if we're dealing with a regex) --- src/vpn/gnunet-helper-vpn.c | 36 +++++++++++++++++++++++++----------- src/vpn/gnunet-service-vpn.c | 19 +++++++++++++------ 2 files changed, 38 insertions(+), 17 deletions(-) (limited to 'src/vpn') diff --git a/src/vpn/gnunet-helper-vpn.c b/src/vpn/gnunet-helper-vpn.c index 4f9de1d0a..62696a545 100644 --- a/src/vpn/gnunet-helper-vpn.c +++ b/src/vpn/gnunet-helper-vpn.c @@ -111,7 +111,9 @@ init_tun (char *dev) if (-1 == ioctl (fd, TUNSETIFF, (void *) &ifr)) { - fprintf (stderr, "Error with ioctl on `%s': %s\n", "/dev/net/tun", + fprintf (stderr, + "Error with ioctl on `%s': %s\n", + "/dev/net/tun", strerror (errno)); (void) close (fd); return -1; @@ -143,14 +145,17 @@ set_address6 (const char *dev, const char *address, unsigned long prefix_len) sa6.sin6_family = AF_INET6; if (1 != inet_pton (AF_INET6, address, sa6.sin6_addr.s6_addr)) { - fprintf (stderr, "Failed to parse address `%s': %s\n", address, - strerror (errno)); + fprintf (stderr, + "Failed to parse IPv6 address `%s'\n", + address); exit (1); } if (-1 == (fd = socket (PF_INET6, SOCK_DGRAM, 0))) { - fprintf (stderr, "Error creating socket: %s\n", strerror (errno)); + fprintf (stderr, + "Error creating socket: %s\n", + strerror (errno)); exit (1); } @@ -236,14 +241,17 @@ set_address4 (const char *dev, const char *address, const char *mask) */ if (1 != inet_pton (AF_INET, address, &addr->sin_addr.s_addr)) { - fprintf (stderr, "Failed to parse address `%s': %s\n", address, - strerror (errno)); + fprintf (stderr, + "Failed to parse IPv4 address `%s'\n", + address); exit (1); } if (-1 == (fd = socket (PF_INET, SOCK_DGRAM, 0))) { - fprintf (stderr, "Error creating socket: %s\n", strerror (errno)); + fprintf (stderr, + "Error creating socket: %s\n", + strerror (errno)); exit (1); } @@ -254,7 +262,10 @@ set_address4 (const char *dev, const char *address, const char *mask) */ if (-1 == ioctl (fd, SIOCSIFADDR, &ifr)) { - fprintf (stderr, "ioctl failed at %d: %s\n", __LINE__, strerror (errno)); + fprintf (stderr, + "ioctl failed at %d: %s\n", + __LINE__, + strerror (errno)); (void) close (fd); exit (1); } @@ -265,8 +276,9 @@ set_address4 (const char *dev, const char *address, const char *mask) addr = (struct sockaddr_in *) &(ifr.ifr_netmask); if (1 != inet_pton (AF_INET, mask, &addr->sin_addr.s_addr)) { - fprintf (stderr, "Failed to parse address `%s': %s\n", mask, - strerror (errno)); + fprintf (stderr, + "Failed to parse IPv4 address mask `%s'\n", + mask); (void) close (fd); exit (1); } @@ -276,7 +288,9 @@ set_address4 (const char *dev, const char *address, const char *mask) */ if (-1 == ioctl (fd, SIOCSIFNETMASK, &ifr)) { - fprintf (stderr, "ioctl failed at line %d: %s\n", __LINE__, + fprintf (stderr, + "ioctl failed at line %d: %s\n", + __LINE__, strerror (errno)); (void) close (fd); exit (1); diff --git a/src/vpn/gnunet-service-vpn.c b/src/vpn/gnunet-service-vpn.c index 401e4078b..cd0c9a07e 100644 --- a/src/vpn/gnunet-service-vpn.c +++ b/src/vpn/gnunet-service-vpn.c @@ -728,10 +728,10 @@ handle_regex_result (void *cls, return; } ts->channel = GNUNET_CADET_channel_create (cadet_handle, - ts, - id, - apptype, - GNUNET_CADET_OPTION_DEFAULT); + ts, + id, + apptype, + GNUNET_CADET_OPTION_DEFAULT); } @@ -1095,7 +1095,14 @@ route_packet (struct DestinationEntry *destination, ts->heap_node, GNUNET_TIME_absolute_get ().abs_value_us); } - GNUNET_assert (NULL != ts->channel); + if (NULL == ts->channel) + { + GNUNET_STATISTICS_update (stats, + gettext_noop ("# Packets dropped (channel not yet online)"), + 1, + GNUNET_NO); + return; + } /* send via channel */ switch (protocol) @@ -2753,7 +2760,7 @@ service_redirect_to_service (void *cls, de->dt_tail, dt); ts = create_channel_to_destination (dt, - result_af); + result_af); switch (result_af) { case AF_INET: -- cgit v1.2.3