X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-network%2Fsd-dhcp-client.c;h=5824e6ee91121359c7792014431116253eac9668;hb=3b7ca119fdc501e21f017695dc9b6f82fdbd1d93;hp=0be6212a4f14953fbe4894ce39f6d2d393e233ae;hpb=6a0f1f6d5af7c7300d3db7a0ba2b068f8abd222b;p=elogind.git diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c index 0be6212a4..5824e6ee9 100644 --- a/src/libsystemd-network/sd-dhcp-client.c +++ b/src/libsystemd-network/sd-dhcp-client.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -292,7 +293,7 @@ static int dhcp_client_send_raw(sd_dhcp_client *client, DHCPPacket *packet, } static int client_send_discover(sd_dhcp_client *client) { - _cleanup_free_ DHCPPacket *discover; + _cleanup_free_ DHCPPacket *discover = NULL; size_t optlen, len; uint8_t *opt; usec_t time_now; @@ -936,6 +937,11 @@ static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message, return 0; } + if (be32toh(message->magic) != DHCP_MAGIC_COOKIE) { + log_dhcp_client(client, "not a DHCP message: ignoring"); + return 0; + } + if (message->op != BOOTREPLY) { log_dhcp_client(client, "not a BOOTREPLY message: ignoring"); return 0; @@ -948,6 +954,11 @@ static int client_handle_message(sd_dhcp_client *client, DHCPMessage *message, return 0; } + if (message->htype != ARPHRD_ETHER || message->hlen != ETHER_ADDR_LEN) { + log_dhcp_client(client, "not an ethernet packet"); + return 0; + } + if (memcmp(&message->chaddr[0], &client->client_id.mac_addr, ETH_ALEN)) { log_dhcp_client(client, "received chaddr does not match "