From 8a73990f5182d6a391b0dc2404da41e24bf220d5 Mon Sep 17 00:00:00 2001 From: Sylvain Rochet Date: Sat, 11 Apr 2015 14:06:06 +0200 Subject: [PATCH] PPP, PPPoL2TP, improved pppol2tp_create() error path --- src/netif/ppp/pppol2tp.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/netif/ppp/pppol2tp.c b/src/netif/ppp/pppol2tp.c index f0160a33..c06c303f 100644 --- a/src/netif/ppp/pppol2tp.c +++ b/src/netif/ppp/pppol2tp.c @@ -126,18 +126,17 @@ ppp_pcb *pppol2tp_create(struct netif *pppif, struct udp_pcb *udp; if (ipaddr == NULL) { - return NULL; + goto ipaddr_check_failed; } ppp = ppp_new(pppif, link_status_cb, ctx_cb); if (ppp == NULL) { - return NULL; + goto ppp_new_failed; } l2tp = (pppol2tp_pcb *)memp_malloc(MEMP_PPPOL2TP_PCB); if (l2tp == NULL) { - ppp_free(ppp); - return NULL; + goto memp_malloc_l2tp_failed; } #if LWIP_IPV6 @@ -147,9 +146,7 @@ ppp_pcb *pppol2tp_create(struct netif *pppif, #endif /* LWIP_IPV6 */ udp = udp_new(); if (udp == NULL) { - memp_free(MEMP_PPPOL2TP_PCB, l2tp); - ppp_free(ppp); - return NULL; + goto udp_new_failed; } 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); 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 */