Hi,
when using bird 2.0.8 on openwrt 21.02 (and other versions) on a Netgear R7800 router, if the OSPF protocol is used, either v2 or v3, bird immediately crashes on startup with:
Fri Jun 11 14:41:11 2021 daemon.info
bird: Started
Fri Jun 11 14:41:11 2021 kern.err
kernel: [ 3500.853248] Alignment trap: not handling instruction
f44c0a1f at [<00035848>] Fri Jun 11 14:41:11 2021
kern.alert kernel: [ 3500.853283] 8<--- cut here ---
Fri Jun 11 14:41:11 2021 kern.alert
kernel: [ 3500.859363] Unhandled fault: alignment exception
(0x801) at 0x007e0624
Fri Jun 11 14:41:11 2021 kern.alert
kernel: [ 3500.862443] pgd = 0bbef4fd
Fri Jun 11 14:41:11 2021 kern.alert
kernel: [ 3500.868821] [007e0624] *pgd=5d6ca835, *pte=5c40b75f,
*ppte=5c40bc7f
This router uses an ARMv7 processor
and the issue seems to be to do with memory alignment issues.
I've debugged it and traced it to an access to the
top_hash_entry struct. I've found that if I add the PACKED macro
to the struct definition then it fixes the problem, as per this
patch:
--- a/proto/ospf/topology.h
+++ b/proto/ospf/topology.h
@@ -41,7 +41,7 @@ struct top_hash_entry
u8 mode; /* LSA generated during RT
calculation (LSA_RTCALC or LSA_STALE)*/
u8 nhs_reuse; /* Whether nhs nodes can
be reused during merging.
See a note in rt.c:add_cand()
*/
-};
+} PACKED;
/* Prevents ospf_hash_find() to ignore the entry, for
p->lsrqh and p->lsrth */