forked from espressif/esp-idf
Merge branch 'fix/lwip_dhcps_fuzz' into 'master'
[lwip]: Fix dhcp server minor issues found when fuzzing See merge request espressif/esp-idf!42315
This commit is contained in:
@@ -65,7 +65,9 @@
|
||||
#define DHCP_OPTION_END 255
|
||||
|
||||
//#define USE_CLASS_B_NET 1
|
||||
#ifndef DHCPS_DEBUG
|
||||
#define DHCPS_DEBUG 0
|
||||
#endif
|
||||
#define DHCPS_LOG printf
|
||||
|
||||
#define IS_INVALID_SUBNET_MASK(x) (((x-1) | x) != 0xFFFFFFFF)
|
||||
@@ -191,7 +193,7 @@ void dhcps_delete(dhcps_t *dhcps)
|
||||
dhcps->state = DHCPS_HANDLE_DELETE_PENDING;
|
||||
} else {
|
||||
// otherwise, we're free to delete the handle immediately
|
||||
free(dhcps);
|
||||
mem_free(dhcps);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -892,7 +894,9 @@ static void send_ack(dhcps_t *dhcps, struct dhcps_msg *m, u16_t len)
|
||||
#endif
|
||||
|
||||
if (SendAck_err_t == ERR_OK) {
|
||||
dhcps->dhcps_cb(dhcps->dhcps_cb_arg, m->yiaddr, m->chaddr);
|
||||
if (dhcps->dhcps_cb) {
|
||||
dhcps->dhcps_cb(dhcps->dhcps_cb_arg, m->yiaddr, m->chaddr);
|
||||
}
|
||||
}
|
||||
|
||||
if (p->ref != 0) {
|
||||
@@ -1137,12 +1141,12 @@ POOL_CHECK:
|
||||
if ((dhcps->client_address.addr > dhcps->dhcps_poll.end_ip.addr) || (ip4_addr_isany(&dhcps->client_address))) {
|
||||
if (pnode != NULL) {
|
||||
node_remove_from_list(&dhcps->plist, pnode);
|
||||
free(pnode);
|
||||
mem_free(pnode);
|
||||
pnode = NULL;
|
||||
}
|
||||
|
||||
if (pdhcps_pool != NULL) {
|
||||
free(pdhcps_pool);
|
||||
mem_free(pdhcps_pool);
|
||||
pdhcps_pool = NULL;
|
||||
}
|
||||
|
||||
@@ -1154,12 +1158,12 @@ POOL_CHECK:
|
||||
if (ret == DHCPS_STATE_RELEASE || ret == DHCPS_STATE_NAK || ret == DHCPS_STATE_DECLINE) {
|
||||
if (pnode != NULL) {
|
||||
node_remove_from_list(&dhcps->plist, pnode);
|
||||
free(pnode);
|
||||
mem_free(pnode);
|
||||
pnode = NULL;
|
||||
}
|
||||
|
||||
if (pdhcps_pool != NULL) {
|
||||
free(pdhcps_pool);
|
||||
mem_free(pdhcps_pool);
|
||||
pdhcps_pool = NULL;
|
||||
}
|
||||
|
||||
@@ -1323,7 +1327,7 @@ static void handle_dhcp(void *arg,
|
||||
DHCPS_LOG("dhcps: handle_dhcp-> pbuf_free(p)\n");
|
||||
#endif
|
||||
pbuf_free(p);
|
||||
free(pmsg_dhcps);
|
||||
mem_free(pmsg_dhcps);
|
||||
pmsg_dhcps = NULL;
|
||||
}
|
||||
|
||||
@@ -1476,9 +1480,9 @@ err_t dhcps_stop(dhcps_t *dhcps, struct netif *netif)
|
||||
pback_node = pnode;
|
||||
pnode = pback_node->pnext;
|
||||
node_remove_from_list(&dhcps->plist, pback_node);
|
||||
free(pback_node->pnode);
|
||||
mem_free(pback_node->pnode);
|
||||
pback_node->pnode = NULL;
|
||||
free(pback_node);
|
||||
mem_free(pback_node);
|
||||
pback_node = NULL;
|
||||
}
|
||||
sys_untimeout(dhcps_tmr, dhcps);
|
||||
@@ -1520,9 +1524,9 @@ static void kill_oldest_dhcps_pool(dhcps_t *dhcps)
|
||||
} else {
|
||||
minpre->pnext = minp->pnext;
|
||||
}
|
||||
free(minp->pnode);
|
||||
mem_free(minp->pnode);
|
||||
minp->pnode = NULL;
|
||||
free(minp);
|
||||
mem_free(minp);
|
||||
minp = NULL;
|
||||
}
|
||||
|
||||
@@ -1537,7 +1541,7 @@ static void dhcps_tmr(void *arg)
|
||||
dhcps_t *dhcps = arg;
|
||||
dhcps_handle_state state = dhcps->state;
|
||||
if (state == DHCPS_HANDLE_DELETE_PENDING) {
|
||||
free(dhcps);
|
||||
mem_free(dhcps);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1559,9 +1563,9 @@ static void dhcps_tmr(void *arg)
|
||||
pback_node = pnode;
|
||||
pnode = pback_node->pnext;
|
||||
node_remove_from_list(&dhcps->plist, pback_node);
|
||||
free(pback_node->pnode);
|
||||
mem_free(pback_node->pnode);
|
||||
pback_node->pnode = NULL;
|
||||
free(pback_node);
|
||||
mem_free(pback_node);
|
||||
pback_node = NULL;
|
||||
} else {
|
||||
pnode = pnode ->pnext;
|
||||
|
||||
Reference in New Issue
Block a user