dhcpv6: check message type
authorMikael Magnusson <mikma@users.sourceforge.net>
Wed, 4 Mar 2020 00:25:50 +0000 (01:25 +0100)
committerHans Dedecker <dedeckeh@gmail.com>
Thu, 29 Oct 2020 21:09:01 +0000 (22:09 +0100)
Signed-off-by: Mikael Magnusson <mikma@users.sourceforge.net>
src/dhcpv6.c

index 21b95fa2576bbddfe41ecbf776ba2cc0d0cdc58f..7c6c7abe89f1de089c036d4fa030c6e72bad6253 100644 (file)
@@ -360,9 +360,24 @@ static void handle_client_request(void *addr, void *data, size_t len,
        if (hdr->msg_type == DHCPV6_MSG_RELAY_FORW)
                handle_nested_message(data, len, &hdr, &opts, &opts_end, iov);
 
-       if (hdr->msg_type == DHCPV6_MSG_ADVERTISE || hdr->msg_type == DHCPV6_MSG_REPLY ||
-           hdr->msg_type == DHCPV6_MSG_RELAY_REPL)
-               return;
+       switch (hdr->msg_type) {
+       case DHCPV6_MSG_SOLICIT:
+       case DHCPV6_MSG_REQUEST:
+       case DHCPV6_MSG_CONFIRM:
+       case DHCPV6_MSG_RENEW:
+       case DHCPV6_MSG_REBIND:
+       case DHCPV6_MSG_RELEASE:
+       case DHCPV6_MSG_DECLINE:
+       case DHCPV6_MSG_INFORMATION_REQUEST:
+       case DHCPV6_MSG_RELAY_FORW:
+               break; /* Valid message types for clients */
+       case DHCPV6_MSG_ADVERTISE:
+       case DHCPV6_MSG_REPLY:
+       case DHCPV6_MSG_RECONFIGURE:
+       case DHCPV6_MSG_RELAY_REPL:
+       default:
+               return; /* Invalid message types for clients */
+       }
 
        if (!IN6_IS_ADDR_MULTICAST((struct in6_addr *)dest_addr) && iov[IOV_NESTED].iov_len == 0 &&
            (hdr->msg_type == DHCPV6_MSG_SOLICIT || hdr->msg_type == DHCPV6_MSG_CONFIRM ||