[PATCH] Bus error on ARMv7 when using OSPF

Matthew Reeve webmail at mreeve.com
Mon Jun 14 17:25:04 CEST 2021


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 */

Thanks.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://trubka.network.cz/pipermail/bird-users/attachments/20210614/a3b5a34b/attachment.htm>


More information about the Bird-users mailing list