From: Florian Westphal Date: Sat, 13 Jul 2019 19:34:43 +0000 (+0200) Subject: udata: fix sigbus crash on sparc X-Git-Tag: libnftnl-1.1.4~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b1d1e1b9a4c65cfd005b52e37510ec3bcac8c4e8;p=thirdparty%2Flibnftnl.git 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 --- diff --git a/src/udata.c b/src/udata.c index b5a47295..9f173958 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);