Fix initialization of a struct sockaddr_in. 37/head
authorStefan Sperling <stsp@stsp.name>
Mon, 3 Jul 2017 20:08:41 +0000 (22:08 +0200)
committerStefan Sperling <stsp@stsp.name>
Mon, 3 Jul 2017 20:08:41 +0000 (22:08 +0200)
While reading an IPv4 broadcast address from the configuration file,
do not forget about initializing the family sockaddr_in struct field.
Otherwise the sockaddr_in struct is invalid, and a BSD kernel will reject it.

Signed-off-by: Stefan Sperling <stsp@stsp.name>
src/unix/ifnet.c

index 2755c29..c286289 100644 (file)
@@ -632,7 +632,9 @@ chk_if_up(struct olsr_if *iface, int debuglvl __attribute__ ((unused)))
     /* Find broadcast address */
     if (iface->cnf->ipv4_multicast.v4.s_addr) {
       /* Specified broadcast */
-      memcpy(&((struct sockaddr_in *)&ifs.int_broadaddr)->sin_addr.s_addr, &iface->cnf->ipv4_multicast.v4, sizeof(uint32_t));
+      struct sockaddr_in *sin = &ifs.int_broadaddr;
+      memcpy(&sin->sin_addr.s_addr, &iface->cnf->ipv4_multicast.v4, sizeof(uint32_t));
+      sin->sin_family = AF_INET;
     } else {
       /* Autodetect */
       struct sockaddr* ifrb;