Petr Menšík a6aab1
From 3d4ff1ba8419546490b464418223132529514033 Mon Sep 17 00:00:00 2001
Petr Menšík a6aab1
From: Simon Kelley <simon@thekelleys.org.uk>
Petr Menšík a6aab1
Date: Mon, 25 Sep 2017 18:52:50 +0100
Petr Menšík a6aab1
Subject: [PATCH 4/9] Security fix, CVE-2017-14493, DHCPv6 - Stack buffer
Petr Menšík a6aab1
 overflow.
Petr Menšík a6aab1
Petr Menšík a6aab1
Fix stack overflow in DHCPv6 code. An attacker who can send
Petr Menšík a6aab1
a DHCPv6 request to dnsmasq can overflow the stack frame and
Petr Menšík a6aab1
crash or control dnsmasq.
Petr Menšík a6aab1
---
Petr Menšík a6aab1
 src/rfc3315.c | 3 +++
Petr Menšík a6aab1
 1 file changed, 3 insertions(+)
Petr Menšík a6aab1
Petr Menšík a6aab1
diff --git a/src/rfc3315.c b/src/rfc3315.c
Petr Menšík a6aab1
index 1687931..920907c 100644
Petr Menšík a6aab1
--- a/src/rfc3315.c
Petr Menšík a6aab1
+++ b/src/rfc3315.c
Petr Menšík a6aab1
@@ -206,6 +206,9 @@ static int dhcp6_maybe_relay(struct state *state, void *inbuff, size_t sz,
Petr Menšík a6aab1
   /* RFC-6939 */
Petr Menšík a6aab1
   if ((opt = opt6_find(opts, end, OPTION6_CLIENT_MAC, 3)))
Petr Menšík a6aab1
     {
Petr Menšík a6aab1
+      if (opt6_len(opt) - 2 > DHCP_CHADDR_MAX) {
Petr Menšík a6aab1
+        return 0;
Petr Menšík a6aab1
+      }
Petr Menšík a6aab1
       state->mac_type = opt6_uint(opt, 0, 2);
Petr Menšík a6aab1
       state->mac_len = opt6_len(opt) - 2;
Petr Menšík a6aab1
       memcpy(&state->mac[0], opt6_ptr(opt, 2), state->mac_len);
Petr Menšík a6aab1
-- 
Petr Menšík a6aab1
2.9.5
Petr Menšík a6aab1