blob/blobmsg: use 32 bit load/store for 64 bit access, unaligned attributes cause data corruption on ARM
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
This commit is contained in:
parent
f15ceb8ced
commit
8a89e7f388
2 changed files with 8 additions and 3 deletions
6
blob.h
6
blob.h
|
@ -191,8 +191,10 @@ blob_get_u32(const struct blob_attr *attr)
|
||||||
static inline uint64_t
|
static inline uint64_t
|
||||||
blob_get_u64(const struct blob_attr *attr)
|
blob_get_u64(const struct blob_attr *attr)
|
||||||
{
|
{
|
||||||
uint64_t *tmp = (uint64_t*)attr->data;
|
uint32_t *ptr = blob_data(attr);
|
||||||
return be64_to_cpu(*tmp);
|
uint64_t tmp = ((uint64_t) be32_to_cpu(ptr[0])) << 32;
|
||||||
|
tmp |= be32_to_cpu(ptr[1]);
|
||||||
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int8_t
|
static inline int8_t
|
||||||
|
|
|
@ -180,7 +180,10 @@ static inline uint32_t blobmsg_get_u32(struct blob_attr *attr)
|
||||||
|
|
||||||
static inline uint64_t blobmsg_get_u64(struct blob_attr *attr)
|
static inline uint64_t blobmsg_get_u64(struct blob_attr *attr)
|
||||||
{
|
{
|
||||||
return be64_to_cpu(*(uint64_t *) blobmsg_data(attr));
|
uint32_t *ptr = blobmsg_data(attr);
|
||||||
|
uint64_t tmp = ((uint64_t) be32_to_cpu(ptr[0])) << 32;
|
||||||
|
tmp |= be32_to_cpu(ptr[1]);
|
||||||
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline char *blobmsg_get_string(struct blob_attr *attr)
|
static inline char *blobmsg_get_string(struct blob_attr *attr)
|
||||||
|
|
Loading…
Reference in a new issue