diff --git a/src/netif/ppp/pppoe.c b/src/netif/ppp/pppoe.c index 2cf09b24..3accda2d 100644 --- a/src/netif/ppp/pppoe.c +++ b/src/netif/ppp/pppoe.c @@ -174,29 +174,26 @@ ppp_pcb *pppoe_create(struct netif *pppif, LWIP_UNUSED_ARG(service_name); LWIP_UNUSED_ARG(concentrator_name); - ppp = ppp_new(pppif, link_status_cb, ctx_cb); - if (ppp == NULL) { - return NULL; - } - sc = (struct pppoe_softc *)memp_malloc(MEMP_PPPOE_IF); if (sc == NULL) { - ppp_free(ppp); return NULL; } - memset(sc, 0, sizeof(struct pppoe_softc)); + ppp = ppp_new(pppif, link_status_cb, ctx_cb); + if (ppp == NULL) { + memp_free(MEMP_PPPOE_IF, sc); + return NULL; + } + ppp_link_set_callbacks(ppp, &pppoe_callbacks, sc); + + memset(sc, 0, sizeof(struct pppoe_softc)); /* changed to real address later */ MEMCPY(&sc->sc_dest, ethbroadcast.addr, sizeof(sc->sc_dest)); - sc->pcb = ppp; sc->sc_ethif = ethif; - /* put the new interface at the head of the list */ sc->next = pppoe_softc_list; pppoe_softc_list = sc; - - ppp_link_set_callbacks(ppp, &pppoe_callbacks, sc); return ppp; } diff --git a/src/netif/ppp/pppol2tp.c b/src/netif/ppp/pppol2tp.c index 4482d59f..24a237cb 100644 --- a/src/netif/ppp/pppol2tp.c +++ b/src/netif/ppp/pppol2tp.c @@ -124,16 +124,17 @@ ppp_pcb *pppol2tp_create(struct netif *pppif, goto ipaddr_check_failed; } - ppp = ppp_new(pppif, link_status_cb, ctx_cb); - if (ppp == NULL) { - goto ppp_new_failed; - } - l2tp = (pppol2tp_pcb *)memp_malloc(MEMP_PPPOL2TP_PCB); if (l2tp == NULL) { goto memp_malloc_l2tp_failed; } + ppp = ppp_new(pppif, link_status_cb, ctx_cb); + if (ppp == NULL) { + goto ppp_new_failed; + } + ppp_link_set_callbacks(ppp, &pppol2tp_callbacks, l2tp); + #if LWIP_IPV6 if (IP_IS_V6_VAL(*ipaddr)) { udp = udp_new_ip6(); @@ -157,14 +158,13 @@ ppp_pcb *pppol2tp_create(struct netif *pppif, l2tp->secret_len = secret_len; #endif /* PPPOL2TP_AUTH_SUPPORT */ - 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: + memp_free(MEMP_PPPOL2TP_PCB, l2tp); +memp_malloc_l2tp_failed: ipaddr_check_failed: return NULL; } diff --git a/src/netif/ppp/pppos.c b/src/netif/ppp/pppos.c index 2b19d444..309500f2 100644 --- a/src/netif/ppp/pppos.c +++ b/src/netif/ppp/pppos.c @@ -173,20 +173,20 @@ ppp_pcb *pppos_create(struct netif *pppif, pppos_output_cb_fn output_cb, pppos_pcb *pppos; ppp_pcb *ppp; - ppp = ppp_new(pppif, link_status_cb, ctx_cb); - if (ppp == NULL) { + pppos = (pppos_pcb *)memp_malloc(MEMP_PPPOS_PCB); + if (pppos == NULL) { return NULL; } - pppos = (pppos_pcb *)memp_malloc(MEMP_PPPOS_PCB); - if (pppos == NULL) { - ppp_free(ppp); + ppp = ppp_new(pppif, link_status_cb, ctx_cb); + if (ppp == NULL) { + memp_free(MEMP_PPPOS_PCB, pppos); return NULL; } + ppp_link_set_callbacks(ppp, &pppos_callbacks, pppos); pppos->ppp = ppp; pppos->output_cb = output_cb; - ppp_link_set_callbacks(ppp, &pppos_callbacks, pppos); return ppp; }