Bug Report: Unaligned Access in BGP Code on ARMv7 Platforms

nick vincent at systemli.org
Wed Dec 11 02:14:39 CET 2024


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);
>


More information about the Bird-users mailing list