diff options
author | Max <msuraev@sysmocom.de> | 2016-01-21 17:16:56 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2016-01-22 23:21:58 +0100 |
commit | 08621a8ebb163aed6ba96e52ad283b91c04501a0 (patch) | |
tree | 58f843e0a835a02f2bad4363a80bef35123de39f /src/bits.c | |
parent | cf37c4cd293def64ca87a82def0be2c8aab12cf0 (diff) |
bitvec: Fix unaligned memory access in osmo_revbytebits_buf
The undefined behavior sanitizer found the 32bit load from an
unaligned memory address. This will cause an exception on ARMv5te
and a manual fix-up.
[hfreyther: On armv6, x86 the usage of memcpy leads to shorter
amount of instructions but on armv5te the memcpy is not expanded
leading to a branch. Use the version of max until we have the time
to benchmark it]
Sponsored-by: On-Waves ehf
Diffstat (limited to 'src/bits.c')
-rw-r--r-- | src/bits.c | 3 |
1 files changed, 1 insertions, 2 deletions
@@ -221,8 +221,7 @@ void osmo_revbytebits_buf(uint8_t *buf, int len) } for (i = unaligned_cnt; i + 3 < len; i += 4) { - uint32_t *cur = (uint32_t *) (buf + i); - *cur = osmo_revbytebits_32(*cur); + osmo_store32be(osmo_revbytebits_32(osmo_load32be(buf + i)), buf + i); len_remain -= 4; } |