esp_netif: Cleanup dhcp-server allocations

This commit is contained in:
David Cermak 2022-03-07 10:41:28 +01:00
parent 1b49cf373f
commit 27375c7917
3 changed files with 11 additions and 9 deletions

View File

@ -552,6 +552,11 @@ esp_netif_t *esp_netif_new(const esp_netif_config_t *esp_netif_config)
// Create DHCP server structure // Create DHCP server structure
if (esp_netif_config->base->flags & ESP_NETIF_DHCP_SERVER) { if (esp_netif_config->base->flags & ESP_NETIF_DHCP_SERVER) {
esp_netif->dhcps = dhcps_new(); esp_netif->dhcps = dhcps_new();
if (esp_netif->dhcps == NULL) {
ESP_LOGE(TAG, "Failed to create dhcp server handle");
esp_netif_destroy(esp_netif);
return NULL;
}
} }
#endif #endif

View File

@ -111,8 +111,7 @@ static void dhcps_tmr(void* arg);
dhcps_t *dhcps_new(void) dhcps_t *dhcps_new(void)
{ {
dhcps_t *dhcps = mem_malloc(sizeof(dhcps_t)); dhcps_t *dhcps = mem_calloc(1, sizeof(dhcps_t));
memset(dhcps , 0x00 , sizeof(dhcps_t));
if (dhcps == NULL) { if (dhcps == NULL) {
return NULL; return NULL;
@ -126,7 +125,7 @@ dhcps_t *dhcps_new(void)
#endif #endif
dhcps->plist = NULL; dhcps->plist = NULL;
dhcps->renew = false; dhcps->renew = false;
dhcps->dhcps_lease_time = DHCPS_LEASE_TIME_DEF; //minute dhcps->dhcps_lease_time = DHCPS_LEASE_TIME_DEF;
dhcps->dhcps_offer = 0xFF; dhcps->dhcps_offer = 0xFF;
dhcps->dhcps_dns = 0x00; dhcps->dhcps_dns = 0x00;
dhcps->dhcps_pcb = NULL; dhcps->dhcps_pcb = NULL;
@ -926,14 +925,12 @@ static s16_t parse_msg(dhcps_t *dhcps, struct dhcps_msg *m, u16_t len)
pdhcps_pool = NULL; pdhcps_pool = NULL;
pnode = NULL; pnode = NULL;
} else { } else {
pdhcps_pool = (struct dhcps_pool *)mem_malloc(sizeof(struct dhcps_pool)); pdhcps_pool = (struct dhcps_pool *)mem_calloc(1, sizeof(struct dhcps_pool));
memset(pdhcps_pool , 0x00 , sizeof(struct dhcps_pool));
pdhcps_pool->ip.addr = dhcps->client_address.addr; pdhcps_pool->ip.addr = dhcps->client_address.addr;
memcpy(pdhcps_pool->mac, m->chaddr, sizeof(pdhcps_pool->mac)); memcpy(pdhcps_pool->mac, m->chaddr, sizeof(pdhcps_pool->mac));
pdhcps_pool->lease_timer = lease_timer; pdhcps_pool->lease_timer = lease_timer;
pnode = (list_node *)mem_malloc(sizeof(list_node)); pnode = (list_node *)mem_calloc(1, sizeof(list_node));
memset(pnode , 0x00 , sizeof(list_node));
pnode->pnode = pdhcps_pool; pnode->pnode = pdhcps_pool;
pnode->pnext = NULL; pnode->pnext = NULL;
@ -1033,13 +1030,12 @@ static void handle_dhcp(void *arg,
malloc_len = p->tot_len; malloc_len = p->tot_len;
} }
pmsg_dhcps = (struct dhcps_msg *)mem_malloc(malloc_len); pmsg_dhcps = (struct dhcps_msg *)mem_calloc(1, malloc_len);
if (NULL == pmsg_dhcps) { if (NULL == pmsg_dhcps) {
pbuf_free(p); pbuf_free(p);
return; return;
} }
memset(pmsg_dhcps , 0x00 , malloc_len);
p_dhcps_msg = (u8_t *)pmsg_dhcps; p_dhcps_msg = (u8_t *)pmsg_dhcps;
tlen = p->tot_len; tlen = p->tot_len;
data = p->payload; data = p->payload;

View File

@ -114,6 +114,7 @@ TEST_CASE("localhost ping test", "[lwip]")
TEST_CASE("dhcp server init/deinit", "[lwip][leaks=0]") TEST_CASE("dhcp server init/deinit", "[lwip][leaks=0]")
{ {
dhcps_t *dhcps = dhcps_new(); dhcps_t *dhcps = dhcps_new();
TEST_ASSERT_NOT_NULL(dhcps);
ip4_addr_t ip = { .addr = IPADDR_ANY }; ip4_addr_t ip = { .addr = IPADDR_ANY };
TEST_ASSERT(dhcps_start(dhcps, NULL, ip) == ERR_ARG); TEST_ASSERT(dhcps_start(dhcps, NULL, ip) == ERR_ARG);
TEST_ASSERT(dhcps_stop(dhcps, NULL) == ERR_ARG); TEST_ASSERT(dhcps_stop(dhcps, NULL) == ERR_ARG);