Bug Report: Unaligned Access in BGP Code on ARMv7 Platforms
Ondrej Zajicek
santiago at crfreenet.org
Thu Dec 12 02:31:26 CET 2024
On Thu, Dec 12, 2024 at 12:50:31AM +0100, nick wrote:
> Can you give me a quick guide on how to enable the debug output?
> I tried for example setting in the config file:
>
> > log "/tmp/birddebug.log" all;
> > debug protocols all;
>
> I am not able to see any output from ALIGN.
As the log message is generated even before the config file is parsed, it
uses the default log output, which is stderr and syslog (if available):
# ./bird -l
bird: ALIGN: 4 4 4 8 8
# grep ALIGN /var/log/syslog
2024-12-12T02:11:59.513900+01:00 feanor bird: ALIGN: 4 4 4 8 8
(also, you could use option -D <debugfile>, in which case the default log
output would be directed there.)
Alternatively, if logging to the usual configured logfile would be more
practical to you, the test call could be moved from bgp_build() to
bgp_init() (attached log-alignment-v2.patch), which is called after
everything is initialized and log is directed to the configured file.
> On 12/11/24 4:40 AM, Ondrej Zajicek wrote:
> > On Wed, Dec 11, 2024 at 02:14:39AM +0100, nick wrote:
> > > 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?
> > A part of my previous explanation was wrong, the issue is not related to
> > net_copy(), as the crash happened even before.
> >
> > For some reason, struct bgp_prefix is u64-aligned. That makes sense in
> > the original code, where u64 alignment is forced by struct net_addr, but
> > i have no idea why this is true even after the patch removing the forced
> > alignment.
> >
> > The slab allocator in sl_alloc() just returns u32-aligned memory, because
> > it is configured for sizeof(struct bgp_prefix) + sizeof(net_addr_ip6) and
> > the second is 20 as net_addr_ip6 is u32-aligned. The sl_alloc() internally
> > only enforces word-size alignment, wich is u32 in your case.
> >
> > Please disregard the previous patch. Can you try the first attached patch
> > (log-alignment.patch) to log alignment of different structures with or
> > without the second patch (net-addr-u32-align.patch) and report me results?
--
Elen sila lumenn' omentielvo
Ondrej 'Santiago' Zajicek (email: santiago at crfreenet.org)
"To err is human -- to blame it on a computer is even more so."
-------------- next part --------------
A non-text attachment was scrubbed...
Name: log-alignment-v2.patch
Type: text/x-diff
Size: 609 bytes
Desc: not available
URL: <http://trubka.network.cz/pipermail/bird-users/attachments/20241212/2d0096e5/attachment.bin>
More information about the Bird-users
mailing list