PPP, PPPoL2TP, improved pppol2tp_create() error path

This commit is contained in:
Sylvain Rochet 2015-04-11 14:06:06 +02:00
parent efe229a54b
commit 8a73990f51

View File

@ -126,18 +126,17 @@ ppp_pcb *pppol2tp_create(struct netif *pppif,
struct udp_pcb *udp; struct udp_pcb *udp;
if (ipaddr == NULL) { if (ipaddr == NULL) {
return NULL; goto ipaddr_check_failed;
} }
ppp = ppp_new(pppif, link_status_cb, ctx_cb); ppp = ppp_new(pppif, link_status_cb, ctx_cb);
if (ppp == NULL) { if (ppp == NULL) {
return NULL; goto ppp_new_failed;
} }
l2tp = (pppol2tp_pcb *)memp_malloc(MEMP_PPPOL2TP_PCB); l2tp = (pppol2tp_pcb *)memp_malloc(MEMP_PPPOL2TP_PCB);
if (l2tp == NULL) { if (l2tp == NULL) {
ppp_free(ppp); goto memp_malloc_l2tp_failed;
return NULL;
} }
#if LWIP_IPV6 #if LWIP_IPV6
@ -147,9 +146,7 @@ ppp_pcb *pppol2tp_create(struct netif *pppif,
#endif /* LWIP_IPV6 */ #endif /* LWIP_IPV6 */
udp = udp_new(); udp = udp_new();
if (udp == NULL) { if (udp == NULL) {
memp_free(MEMP_PPPOL2TP_PCB, l2tp); goto udp_new_failed;
ppp_free(ppp);
return NULL;
} }
udp_recv(udp, pppol2tp_input, l2tp); udp_recv(udp, pppol2tp_input, l2tp);
@ -167,6 +164,14 @@ ppp_pcb *pppol2tp_create(struct netif *pppif,
ppp_link_set_callbacks(ppp, &pppol2tp_callbacks, l2tp); ppp_link_set_callbacks(ppp, &pppol2tp_callbacks, l2tp);
return ppp; return ppp;
udp_new_failed:
memp_free(MEMP_PPPOL2TP_PCB, l2tp);
memp_malloc_l2tp_failed:
ppp_free(ppp);
ppp_new_failed:
ipaddr_check_failed:
return NULL;
} }
/* Called by PPP core */ /* Called by PPP core */