[Top][All Lists]
[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);
pbuf-patch.txt
Description: Text document
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lwip-users] Bug in src/core/pbuf.c,
Curt McDowell <=