From bda7102d60bfdab2aa3f36ebd09a119206f264d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Falgueras=20Garc=C3=ADa?= Date: Mon, 11 Jul 2016 18:07:40 +0200 Subject: src: Fix nftnl_*_get_data() to return the real attribute length MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All getters must set the memory size of the attributes, ie. this includes the nul-termination in strings. For references to opaque objects hidden behind the curtain, report a zero size. Signed-off-by: Carlos Falgueras GarcĂ­a Signed-off-by: Pablo Neira Ayuso --- src/set_elem.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/set_elem.c') diff --git a/src/set_elem.c b/src/set_elem.c index 40b5bfe..4e89210 100644 --- a/src/set_elem.c +++ b/src/set_elem.c @@ -160,25 +160,31 @@ const void *nftnl_set_elem_get(struct nftnl_set_elem *s, uint16_t attr, uint32_t switch(attr) { case NFTNL_SET_ELEM_FLAGS: + *data_len = sizeof(s->set_elem_flags); return &s->set_elem_flags; case NFTNL_SET_ELEM_KEY: /* NFTA_SET_ELEM_KEY */ *data_len = s->key.len; return &s->key.val; case NFTNL_SET_ELEM_VERDICT: /* NFTA_SET_ELEM_DATA */ + *data_len = sizeof(s->data.verdict); return &s->data.verdict; case NFTNL_SET_ELEM_CHAIN: /* NFTA_SET_ELEM_DATA */ + *data_len = strlen(s->data.chain) + 1; return s->data.chain; case NFTNL_SET_ELEM_DATA: /* NFTA_SET_ELEM_DATA */ *data_len = s->data.len; return &s->data.val; case NFTNL_SET_ELEM_TIMEOUT: /* NFTA_SET_ELEM_TIMEOUT */ + *data_len = sizeof(s->timeout); return &s->timeout; case NFTNL_SET_ELEM_EXPIRATION: /* NFTA_SET_ELEM_EXPIRATION */ + *data_len = sizeof(s->expiration); return &s->expiration; case NFTNL_SET_ELEM_USERDATA: *data_len = s->user.len; return s->user.data; case NFTNL_SET_ELEM_EXPR: + *data_len = 0; return s->expr; } return NULL; -- cgit v1.2.3