From c74d881d3d854900e6ef8a7126356d45672342b6 Mon Sep 17 00:00:00 2001 From: Simon Goldschmidt Date: Wed, 12 Oct 2011 18:17:07 +0200 Subject: [PATCH] fixed bug #34534: Error in sending fragmented IP if MEM_ALIGNMENT > 4 --- CHANGELOG | 3 +++ src/core/pbuf.c | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 2f844e44..36ca4151 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -69,6 +69,9 @@ HISTORY ++ Bugfixes: + 2011-10-12: Simon Goldschmidt + * pbuf.c: fixed bug #34534: Error in sending fragmented IP if MEM_ALIGNMENT > 4 + 2011-10-09: Simon Goldschmidt * tcp_out.c: fixed bug #34426: tcp_zero_window_probe() transmits incorrect byte value when pcb->unacked != NULL diff --git a/src/core/pbuf.c b/src/core/pbuf.c index cb79a987..01fc2157 100644 --- a/src/core/pbuf.c +++ b/src/core/pbuf.c @@ -358,7 +358,8 @@ pbuf_alloc(pbuf_layer layer, u16_t length, pbuf_type type) * @param p pointer to the custom pbuf to initialize (already allocated) * @param payload_mem pointer to the buffer that is used for payload and headers, * must be at least big enough to hold 'length' plus the header size, - * may be NULL if set later + * may be NULL if set later. + * ATTENTION: The caller is responsible for correct alignment of this buffer!! * @param payload_mem_len the size of the 'payload_mem' buffer, must be at least * big enough to hold 'length' plus the header size */ @@ -398,7 +399,7 @@ pbuf_alloced_custom(pbuf_layer l, u16_t length, pbuf_type type, struct pbuf_cust p->pbuf.next = NULL; if (payload_mem != NULL) { - p->pbuf.payload = LWIP_MEM_ALIGN((void *)((u8_t *)payload_mem + offset)); + p->pbuf.payload = (u8_t *)payload_mem + LWIP_MEM_ALIGN_SIZE(offset); } else { p->pbuf.payload = NULL; }