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
diff --git a/src/bits.c b/src/bits.c
index 01d7e73..a0a9d9e 100644
--- a/src/bits.c
+++ b/src/bits.c
@@ -221,8 +221,7 @@
}
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;
}