summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2019-07-13 21:34:43 +0200
committerFlorian Westphal <fw@strlen.de>2019-07-13 21:37:58 +0200
commitb1d1e1b9a4c65cfd005b52e37510ec3bcac8c4e8 (patch)
tree3f58f63273440f8a835d70b59edbccd3e1f751a9
parenta6a2d0c9fd97196a98cdf5f1389cd64eae7974b9 (diff)
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 <matorola@gmail.com> Tested-by: Anatoly Pugachev <matorola@gmail.com> Signed-off-by: Florian Westphal <fw@strlen.de>
-rw-r--r--src/udata.c6
1 files 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);