summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2020-02-14 18:20:29 +0100
committerPhil Sutter <phil@nwl.cc>2020-02-19 11:45:44 +0100
commit629ee38dca48651bc8c0eedf2f3a0066a6c0aa5b (patch)
tree18d43f4b117a286f2a80ec70249c39e93aa501c0
parent04cc28d8d6923ea66b08ae9a74d81d8b6ac5b2d7 (diff)
src: Fix for reading garbage in nftnl_chain getters
In {s,u}{32,64} type getters nftnl_assert() is called to make sure returned data length matches expectations. Therefore all attributes must set data_len, which NFTNL_CHAIN_DEVICES didn't. While being at it, do the same change for NFTNL_FLOWTABLE_DEVICES as well to make code a bit more consistent although the problem was fixed for flowtables with commit f8eed54150fd4 ("flowtable: Fix for reading garbage") already (but in the other direction). Fixes: e3ac19b5ec162 ("chain: multi-device support") Signed-off-by: Phil Sutter <phil@nwl.cc>
-rw-r--r--src/chain.c1
-rw-r--r--src/flowtable.c1
2 files changed, 2 insertions, 0 deletions
diff --git a/src/chain.c b/src/chain.c
index b4066e4..94a9e43 100644
--- a/src/chain.c
+++ b/src/chain.c
@@ -364,6 +364,7 @@ const void *nftnl_chain_get_data(const struct nftnl_chain *c, uint16_t attr,
*data_len = strlen(c->dev) + 1;
return c->dev;
case NFTNL_CHAIN_DEVICES:
+ *data_len = 0;
return &c->dev_array[0];
}
return NULL;
diff --git a/src/flowtable.c b/src/flowtable.c
index 1e235d0..635322d 100644
--- a/src/flowtable.c
+++ b/src/flowtable.c
@@ -230,6 +230,7 @@ const void *nftnl_flowtable_get_data(const struct nftnl_flowtable *c,
*data_len = sizeof(int32_t);
return &c->family;
case NFTNL_FLOWTABLE_DEVICES:
+ *data_len = 0;
return &c->dev_array[0];
case NFTNL_FLOWTABLE_SIZE:
*data_len = sizeof(int32_t);