summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--accel-pppd/ipv6/dhcpv6_packet.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/accel-pppd/ipv6/dhcpv6_packet.c b/accel-pppd/ipv6/dhcpv6_packet.c
index 1cae30e6..c0c7bc81 100644
--- a/accel-pppd/ipv6/dhcpv6_packet.c
+++ b/accel-pppd/ipv6/dhcpv6_packet.c
@@ -498,12 +498,21 @@ static void print_hex_array(struct dhcpv6_option *opt, void (*print)(const char
static void print_uint8(struct dhcpv6_option *opt, void (*print)(const char *fmt, ...))
{
+ if (ntohs(opt->hdr->len) < sizeof(uint8_t))
+ return;
+
print(" %i", *(uint8_t *)opt->hdr->data);
}
static void print_time(struct dhcpv6_option *opt, void (*print)(const char *fmt, ...))
{
- print(" %u", *(uint32_t *)opt->hdr->data);
+ uint16_t val;
+
+ if (ntohs(opt->hdr->len) < sizeof(val))
+ return;
+
+ memcpy(&val, opt->hdr->data, sizeof(val));
+ print(" %u", ntohs(val));
}
static void print_ipv6addr(struct dhcpv6_option *opt, void (*print)(const char *fmt, ...))