diff --git a/CHANGELOG b/CHANGELOG index f0d71207..e10ae6b6 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -49,6 +49,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 de94e8b2..cac5dc38 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; }