Don't segfault when there is no IPv6 support
authorSteven Barth <steven@midlink.org>
Thu, 20 Mar 2014 09:30:51 +0000 (10:30 +0100)
committerSteven Barth <steven@midlink.org>
Thu, 20 Mar 2014 09:30:51 +0000 (10:30 +0100)
src/ndp.c
src/router.c

index e006c85261af4180147fb6b79b1d37a95f7a8e99..17ec8b48efa3657c57dba3de677b200446923906 100644 (file)
--- a/src/ndp.c
+++ b/src/ndp.c
@@ -111,6 +111,10 @@ int init_ndp(void)
 
        // Open ICMPv6 socket
        ping_socket = socket(AF_INET6, SOCK_RAW | SOCK_CLOEXEC, IPPROTO_ICMPV6);
+       if (ping_socket < 0) {
+               syslog(LOG_ERR, "Unable to open raw socket: %s", strerror(errno));
+                       return -1;
+       }
 
        int val = 2;
        setsockopt(ping_socket, IPPROTO_RAW, IPV6_CHECKSUM, &val, sizeof(val));
index 3ba552daffa6246154abdcfe5e91bdf0a94cf835..772d77017b4112859f6824dc55e8057bff142912 100644 (file)
@@ -88,6 +88,9 @@ int init_router(void)
 
 int setup_router_interface(struct interface *iface, bool enable)
 {
+       if (!fp_route || router_event.uloop.fd < 0)
+               return -1;
+
        struct ipv6_mreq all_nodes = {ALL_IPV6_NODES, iface->ifindex};
        struct ipv6_mreq all_routers = {ALL_IPV6_ROUTERS, iface->ifindex};