chiark / gitweb /
sd-dhcp: silently ignore malformed packets
[elogind.git] / src / libsystemd-dhcp / sd-dhcp-client.c
index bff35885f6683597f7d61b0f8ff4a8bd61d9e658..d58755a603d664aa23fb3a218b3fdb84edc7b4b0 100644 (file)
@@ -324,6 +324,7 @@ static int client_send_request(sd_dhcp_client *client, uint16_t secs) {
         if (client->state == DHCP_STATE_RENEWING) {
                 err = dhcp_network_send_udp_socket(client->fd,
                                                    client->lease->server_address,
+                                                   DHCP_PORT_SERVER,
                                                    &request->dhcp,
                                                    len - DHCP_IP_UDP_SIZE);
         } else {
@@ -535,7 +536,8 @@ static int client_timeout_t1(sd_event_source *s, uint64_t usec,
         client->attempt = 1;
 
         r = dhcp_network_bind_udp_socket(client->index,
-                                         client->lease->address);
+                                         client->lease->address,
+                                         DHCP_PORT_CLIENT);
         if (r < 0) {
                 client_stop(client, r);
                 return 0;
@@ -708,11 +710,11 @@ static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message,
         assert(message);
 
         if (be32toh(message->xid) != client->xid)
-                return -EINVAL;
+                return 0;
 
         if (memcmp(&message->chaddr[0], &client->mac_addr.ether_addr_octet,
                    ETHER_ADDR_LEN))
-                return -EINVAL;
+                return 0;
 
         switch (client->state) {
         case DHCP_STATE_SELECTING:
@@ -841,7 +843,7 @@ static int client_receive_message_udp(sd_event_source *s, int fd,
 
         r = dhcp_packet_verify_headers(packet, BOOTREPLY, len);
         if (r < 0)
-                return r;
+                return 0;
 
         len -= DHCP_IP_UDP_SIZE;