mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-11-18 20:10:53 +00:00
Fix bug #34526: nd6_queue_packet() frees too much if out-of-memory
Change-Id: Ib7ac0cb1b5a5389dd5449a908485493bd085ba9d
This commit is contained in:
parent
0fb07ba328
commit
2ce17a724a
@ -1543,10 +1543,11 @@ nd6_queue_packet(s8_t neighbor_index, struct pbuf * q)
|
||||
if(copy_needed) {
|
||||
/* copy the whole packet into new pbufs */
|
||||
p = pbuf_alloc(PBUF_LINK, q->tot_len, PBUF_RAM);
|
||||
if ((p == NULL) && (neighbor_cache[neighbor_index].q != NULL)) {
|
||||
while ((p == NULL) && (neighbor_cache[neighbor_index].q != NULL)) {
|
||||
/* Free oldest packet (as per RFC recommendation) */
|
||||
r = neighbor_cache[neighbor_index].q;
|
||||
neighbor_cache[neighbor_index].q = r->next;
|
||||
r->next = NULL;
|
||||
nd6_free_q(r);
|
||||
p = pbuf_alloc(PBUF_LINK, q->tot_len, PBUF_RAM);
|
||||
}
|
||||
@ -1570,6 +1571,7 @@ nd6_queue_packet(s8_t neighbor_index, struct pbuf * q)
|
||||
/* Free oldest packet (as per RFC recommendation) */
|
||||
r = neighbor_cache[neighbor_index].q;
|
||||
neighbor_cache[neighbor_index].q = r->next;
|
||||
r->next = NULL;
|
||||
nd6_free_q(r);
|
||||
new_entry = (struct nd6_q_entry *)memp_malloc(MEMP_ND6_QUEUE);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user