From 1633c7c0050b11e14c6507be8b3942d2d197fab1 Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Wed, 20 Dec 2017 12:29:24 +0100 Subject: [PATCH] gluon-radv-filterd: Check for recvfrom errors The recvfrom can fail and return -1. The caller must check for this error to avoid that it reads uninitialized data from pkt. Signed-off-by: Sven Eckelmann --- package/gluon-radv-filterd/src/gluon-radv-filterd.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package/gluon-radv-filterd/src/gluon-radv-filterd.c b/package/gluon-radv-filterd/src/gluon-radv-filterd.c index 451c14ba..8d515677 100644 --- a/package/gluon-radv-filterd/src/gluon-radv-filterd.c +++ b/package/gluon-radv-filterd/src/gluon-radv-filterd.c @@ -319,16 +319,17 @@ static void handle_ra(int sock) { struct sockaddr_ll src; struct ether_addr mac; unsigned int addr_size = sizeof(src); - size_t len; + ssize_t len; struct { struct ip6_hdr ip6; struct nd_router_advert ra; } pkt; len = recvfrom(sock, &pkt, sizeof(pkt), 0, (struct sockaddr *)&src, &addr_size); + CHECK(len >= 0); // BPF already checked that this is an ICMPv6 RA of a default router - CHECK(len >= sizeof(pkt)); + CHECK((size_t)len >= sizeof(pkt)); CHECK(ntohs(pkt.ip6.ip6_plen) + sizeof(struct ip6_hdr) >= sizeof(pkt)); memcpy(&mac, src.sll_addr, sizeof(mac));