From 23289745d737a57ecc040e18abadebaaf69dc8d1 Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Wed, 21 May 2014 16:31:28 +0200 Subject: [PATCH] sd-dhcp: rely on FIONREAD working This fallback will anyway never get tested, so rip it out. --- src/libsystemd-network/dhcp-protocol.h | 2 +- src/libsystemd-network/sd-dhcp-client.c | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/libsystemd-network/dhcp-protocol.h b/src/libsystemd-network/dhcp-protocol.h index 260508fbb..4d87891ff 100644 --- a/src/libsystemd-network/dhcp-protocol.h +++ b/src/libsystemd-network/dhcp-protocol.h @@ -60,7 +60,7 @@ typedef struct DHCPPacket DHCPPacket; #define DHCP_IP_SIZE (int32_t)(sizeof(struct iphdr)) #define DHCP_IP_UDP_SIZE (int32_t)(sizeof(struct udphdr) + DHCP_IP_SIZE) #define DHCP_MESSAGE_SIZE (int32_t)(sizeof(DHCPMessage)) -#define DHCP_MIN_OPTIONS_SIZE 308 +#define DHCP_MIN_OPTIONS_SIZE 308 /* spec says 312, but that includes the magic cookie */ #define DHCP_MAGIC_COOKIE (uint32_t)(0x63825363) enum { diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c index ac97e0077..ba44069f6 100644 --- a/src/libsystemd-network/sd-dhcp-client.c +++ b/src/libsystemd-network/sd-dhcp-client.c @@ -1186,8 +1186,12 @@ static int client_receive_message_udp(sd_event_source *s, int fd, assert(client); r = ioctl(fd, FIONREAD, &buflen); - if (r < 0 || buflen <= 0) - buflen = sizeof(DHCPMessage) + DHCP_MIN_OPTIONS_SIZE; + if (r < 0) + return r; + + if (buflen < 0) + /* this can't be right */ + return -EIO; message = malloc0(buflen); if (!message) @@ -1224,8 +1228,12 @@ static int client_receive_message_raw(sd_event_source *s, int fd, assert(client); r = ioctl(fd, FIONREAD, &buflen); - if (r < 0 || buflen <= 0) - buflen = sizeof(DHCPPacket) + DHCP_MIN_OPTIONS_SIZE; + if (r < 0) + return r; + + if (buflen < 0) + /* this can't be right */ + return -EIO; packet = malloc0(buflen); if (!packet) -- 2.30.2