summaryrefslogtreecommitdiffstats
path: root/src/bits.c
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2016-01-21 17:16:56 +0100
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2016-01-22 23:21:58 +0100
commit08621a8ebb163aed6ba96e52ad283b91c04501a0 (patch)
tree58f843e0a835a02f2bad4363a80bef35123de39f /src/bits.c
parentcf37c4cd293def64ca87a82def0be2c8aab12cf0 (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.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/src/bits.c b/src/bits.c
index 01d7e735..a0a9d9e8 100644
--- a/src/bits.c
+++ b/src/bits.c
@@ -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;
}