[Olsr-dev] alignment faults on ARM processors
Fri Jul 27 08:50:52 CEST 2012
On 07/26/2012 04:11 PM, Peter Bigot wrote:
> I was recently asked to validate OLSRD on a custom embedded platform
> involving an AT91 ARM processor and Linux 2.6.39 under OpenEmbedded
> Classic. While the 0.5.5 release worked, 0.5.6-r8 and 0.6.3 produced
> a cascade of errors attempting to route to invalid IP addresses.
> A kernel error message indicated unaligned accesses. I tracked this
> down to several uses of the following idiom in src/lq_packet.h:
> *var = ntohl(**((const uint32_t **)p));
> where p is a pointer to a pointer to const uint8_t. It seems that in
> recent Linux kernels CONFIG_ALIGNMENT_TRAP is enabled by default on
> these ARM chips, and the version of Sourcery_G++_Lite required on this
> platform does not support -mno-alignment-traps. In practice, the
> pointer at this point did not satisfy the alignment requirements of
> the processor, and the kernel did not provide a recovery.
> I worked around this by replacing the assignment with an intermediate
> copy from the unaligned buffer into a 4-byte region in a local union
> with a uint32_t; similarly for the int16_t accesses. I regret that I
> can't provide the patch (which is both trivial and a hack anyway), but
> thought a heads-up might be helpful for others trying to make OLSRD
> work in a similar environment.
Hmm... I think all original OLSR messages inside the OLSR packet are
well aligned, as are the fields inside the messages. Since 0.6.0 we even
have checks if the length of a message cannot be
The fact that an uint8_t pointer is cast to 32 bit is okay, because the
uint8_t is a buffer with the packet, which contains all kind of fields
(but still should be well aligned).
Can you explain a little bit more why the kernel is misbehaving? If we
would have unaligned word/byte access, the MIPS architecture would crash
every time you run OLSRd.
Diplom-Informatiker Henning Rogge , Fraunhofer-Institut für
Kommunikation, Informationsverarbeitung und Ergonomie FKIE
Neuenahrer Straße 20, 53343 Wachtberg, Germany
Telefon +49 228 9435-961, Fax +49 228 9435 685
GPG: E1C6 0914 490B 3909 D944 F80D 4487 C67C 55EC CFE0
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 6169 bytes
Desc: S/MIME Cryptographic Signature
More information about the Olsr-dev