dhcpv4: improve error checking in handle_dhcpv4()
authorHans Dedecker <dedeckeh@gmail.com>
Mon, 9 Jul 2018 06:58:00 +0000 (08:58 +0200)
committerHans Dedecker <dedeckeh@gmail.com>
Mon, 9 Jul 2018 06:58:55 +0000 (08:58 +0200)
Check ioctl return value as reported by Coverity in CID1437659

Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
src/dhcpv4.c

index dc10ba3dd65560e1c136808c899ad434a2a23e6c..3386abbeaa721e66de4154ae931c06ac8556d564 100644 (file)
@@ -928,19 +928,21 @@ static void handle_dhcpv4(void *addr, void *data, size_t len,
                dest.sin_addr.s_addr = INADDR_BROADCAST;
                dest.sin_port = htons(DHCPV4_CLIENT_PORT);
        } else {
+               struct arpreq arp = {.arp_flags = ATF_COM};
+
                /*
                 * send reply to the newly (in this proccess) allocated IP
                 */
                dest.sin_addr = reply.yiaddr;
                dest.sin_port = htons(DHCPV4_CLIENT_PORT);
 
-               struct arpreq arp = {.arp_flags = ATF_COM};
                memcpy(arp.arp_ha.sa_data, req->chaddr, 6);
                memcpy(&arp.arp_pa, &dest, sizeof(arp.arp_pa));
                memcpy(arp.arp_dev, iface->ifname, sizeof(arp.arp_dev));
-               ioctl(sock, SIOCSARP, &arp);
-       }
 
+               if (ioctl(sock, SIOCSARP, &arp) < 0)
+                       syslog(LOG_ERR, "ioctl(SIOCSARP): %m");
+       }
 
        if (sendto(sock, &reply, sizeof(reply), MSG_DONTWAIT,
                        (struct sockaddr*)&dest, sizeof(dest)) < 0)