From b1d1e1b9a4c65cfd005b52e37510ec3bcac8c4e8 Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Sat, 13 Jul 2019 21:34:43 +0200 Subject: udata: fix sigbus crash on sparc Anatoly Pugachev reported crash on 'nft list tables' on sparc and provided following gdb backtrace: Starting program: /opt/nft/sbin/nft list tables Program received signal SIGBUS, Bus error. 0xfff8000100946490 in nftnl_udata_get_u32 (attr=0x10000106e30) at udata.c:127 127 return *data; We can't deref attr->value directly, it causes unaligned access. Reported-by: Anatoly Pugachev Tested-by: Anatoly Pugachev Signed-off-by: Florian Westphal --- src/udata.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/udata.c b/src/udata.c index b5a4729..9f17395 100644 --- a/src/udata.c +++ b/src/udata.c @@ -122,9 +122,11 @@ void *nftnl_udata_get(const struct nftnl_udata *attr) EXPORT_SYMBOL(nftnl_udata_get_u32); uint32_t nftnl_udata_get_u32(const struct nftnl_udata *attr) { - uint32_t *data = (uint32_t *)attr->value; + uint32_t data; - return *data; + memcpy(&data, attr->value, sizeof(data)); + + return data; } EXPORT_SYMBOL(nftnl_udata_next); -- cgit v1.2.3