]> git.ipfire.org Git - thirdparty/libnftnl.git/commitdiff
udata: fix sigbus crash on sparc
authorFlorian Westphal <fw@strlen.de>
Sat, 13 Jul 2019 19:34:43 +0000 (21:34 +0200)
committerFlorian Westphal <fw@strlen.de>
Sat, 13 Jul 2019 19:37:58 +0000 (21:37 +0200)
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 <matorola@gmail.com>
Tested-by: Anatoly Pugachev <matorola@gmail.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
src/udata.c

index b5a47295b40d147cd6e2eefde12dc6162675e947..9f17395833b8019d19bb410dfed87f43d8aa4d8d 100644 (file)
@@ -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);