diff --git a/mongoose.c b/mongoose.c index b4702434..58ece1f8 100644 --- a/mongoose.c +++ b/mongoose.c @@ -6087,6 +6087,7 @@ static void ppp_handle_lcp(struct mg_tcpip_if *ifp, uint8_t *lcpp, if (lcpsz < sizeof(*lcp)) return; id = lcp->id; len = mg_ntohs(lcp->len); + if (len < sizeof(*lcp) || len > lcpsz) return; switch (lcp->code) { case MG_PPP_LCP_CFG_REQ: { if (len == sizeof(*lcp)) { @@ -6143,7 +6144,7 @@ static void ppp_handle_ipcp(struct mg_tcpip_if *ifp, uint8_t *ipcpp, if (ipcpsz < sizeof(*ipcp)) return; id = ipcp->id; len = mg_ntohs(ipcp->len); - if (len > ipcpsz) return; + if (len < sizeof(*ipcp) || len > ipcpsz) return; switch (ipcp->code) { case MG_PPP_IPCP_CFG_REQ: MG_VERBOSE(("got IPCP config request, acknowledging...")); @@ -6203,6 +6204,7 @@ static void ppp_handle_ipv6cp(struct mg_tcpip_if *ifp, uint8_t *ipv6cpp, if (ipv6cpsz < sizeof(*ipv6cp)) return; id = ipv6cp->id; len = mg_ntohs(ipv6cp->len); + if (len < sizeof(*ipv6cp) || len > ipv6cpsz) return; switch (ipv6cp->code) { case MG_PPP_IPV6CP_CFG_REQ: MG_VERBOSE(("got IPV6CP config request...")); diff --git a/src/l2_ppp.c b/src/l2_ppp.c index 73d2bf67..591ac3c7 100644 --- a/src/l2_ppp.c +++ b/src/l2_ppp.c @@ -227,6 +227,7 @@ static void ppp_handle_lcp(struct mg_tcpip_if *ifp, uint8_t *lcpp, if (lcpsz < sizeof(*lcp)) return; id = lcp->id; len = mg_ntohs(lcp->len); + if (len < sizeof(*lcp) || len > lcpsz) return; switch (lcp->code) { case MG_PPP_LCP_CFG_REQ: { if (len == sizeof(*lcp)) { @@ -283,7 +284,7 @@ static void ppp_handle_ipcp(struct mg_tcpip_if *ifp, uint8_t *ipcpp, if (ipcpsz < sizeof(*ipcp)) return; id = ipcp->id; len = mg_ntohs(ipcp->len); - if (len > ipcpsz) return; + if (len < sizeof(*ipcp) || len > ipcpsz) return; switch (ipcp->code) { case MG_PPP_IPCP_CFG_REQ: MG_VERBOSE(("got IPCP config request, acknowledging...")); @@ -343,6 +344,7 @@ static void ppp_handle_ipv6cp(struct mg_tcpip_if *ifp, uint8_t *ipv6cpp, if (ipv6cpsz < sizeof(*ipv6cp)) return; id = ipv6cp->id; len = mg_ntohs(ipv6cp->len); + if (len < sizeof(*ipv6cp) || len > ipv6cpsz) return; switch (ipv6cp->code) { case MG_PPP_IPV6CP_CFG_REQ: MG_VERBOSE(("got IPV6CP config request..."));