From b135a0aa4905d30b2fae0b67f7ee2dba2c4c12f7 Mon Sep 17 00:00:00 2001 From: goldsimon Date: Thu, 19 Mar 2015 07:14:33 +0100 Subject: [PATCH] pppos_input_tcpip: fix pbuf leak if tcpip_input returns error, use pbuf_take instead of duplicate copy code --- src/netif/ppp/pppos.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/netif/ppp/pppos.c b/src/netif/ppp/pppos.c index 13a47f2f..7ff7732f 100644 --- a/src/netif/ppp/pppos.c +++ b/src/netif/ppp/pppos.c @@ -487,19 +487,19 @@ pppos_input_tcpip(ppp_pcb *ppp, u8_t *s, int l) { struct pbuf *p, *n; u8_t *cur; + err_t err; p = pbuf_alloc(PBUF_RAW, l, PBUF_POOL); if (!p) { return ERR_MEM; } + pbuf_take(p, s, l); - cur = s; - for (n = p; n; n = n->next) { - MEMCPY(n->payload, cur, n->len); - cur += n->len; + err = tcpip_input(p, ppp_netif(ppp)); + if (err != ERR_OK) { + pbuf_free(p); } - - return tcpip_input(p, ppp_netif(ppp)); + return err; } /* called from TCPIP thread */