lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] Bug in src/core/pbuf.c


From: Curt McDowell
Subject: [lwip-users] Bug in src/core/pbuf.c
Date: Sun, 26 Feb 2006 15:23:17 -0800

Hi,

pbuf_init() will not work unless pbuf_pool_memory[] is properly aligned.  
There's an ASSERT that it's aligned, but if it doesn't end
up aligned by random chance, you're screwed.  With my luck, I had ASSERTs 
turned off, and my CPU simulator corrupted the data
instead of taking an exception, so I was triply-screwed. :-) 

The fix is to add another (MEM_ALIGNMENT - 1) bytes to the pbuf_pool_memory[] 
size, then in pbuf_init() align the initial assignment
of pbuf_pool.  The assertion is no longer needed.  Since the diff below will 
probably get corrupted in the mail, I attached a
unified diff suitable for patch(1)'ing the current CVS HEAD revision.

Regards,
Curt McDowell
Broadcom Corp.

76c76,78
< static u8_t pbuf_pool_memory[(PBUF_POOL_SIZE * 
MEM_ALIGN_SIZE(PBUF_POOL_BUFSIZE + sizeof(struct pbuf)))];
---
> static u8_t pbuf_pool_memory[MEM_ALIGNMENT - 1 +
>                              PBUF_POOL_SIZE * 
> MEM_ALIGN_SIZE(PBUF_POOL_BUFSIZE +
>                                                              sizeof(struct 
> pbuf))];
103,104c105
<   pbuf_pool = (struct pbuf *)&pbuf_pool_memory[0];
<   LWIP_ASSERT("pbuf_init: pool aligned", (mem_ptr_t)pbuf_pool % MEM_ALIGNMENT 
== 0);
---
>   pbuf_pool = (struct pbuf *)MEM_ALIGN(pbuf_pool_memory);

Attachment: pbuf-patch.txt
Description: Text document


reply via email to

[Prev in Thread] Current Thread [Next in Thread]