Thank you! I just ran a quick test and encountered the same crash at the
same line. I’ll have more time to investigate tomorrow and can provide
additional details then. Do you have any other ideas I could try in the
meantime?
Core dump:
https://github.com/PolynomialDivision/coredumpupload/tree/main/u64patch
On 12/11/24 1:41 AM, Ondrej Zajicek wrote:
On Tue, Dec 10, 2024 at 09:15:46PM +0100, nick via Bird-users wrote:
I also uploaded the coredumpfile:
https://github.com/PolynomialDivision/coredumpupload/blob/main/bird_coredump
Thanks. This seems like an interesting issue. In BIRD, generic net_addr
structure is explicitly u64-aligned (to accomodate VPN variants), while
specific net_addr_ip4 and net_addr_ip6 are just u32-aligned. In this case
net_addr_ip6 is allocated with u32 alignment, but then copied with
net_copy(), which assumes generic net_addr for arguments, and compiler
probably used some u64-optimized copying, which required 64-bit alignment
despite being on 32-bit platform,
For starters, try the attached patch. But it is preliminary, we will revisit
alignment of these structures.
The root cause appears to be insufficient alignment of memory
allocated for
structures, specifically in this line:
```c
px = mb_alloc(c->pool, sizeof(struct bgp_prefix) + net->length);
```
Note that it is really allocated two lines above, here:
px = sl_alloc(c->prefix_slab);