From bdeb62656df74b5cf2069a24a9c3cc53d11fc85b Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Wed, 1 Feb 2012 13:02:29 +0100 Subject: nfacct: check if attribute is set in nfacct_attr_get* MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of returning the data even if unset. Reported-by: Alejandro CastaƱo del Castillo Signed-off-by: Pablo Neira Ayuso --- src/libnetfilter_acct.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/libnetfilter_acct.c b/src/libnetfilter_acct.c index 5dc402e..26e5dfa 100644 --- a/src/libnetfilter_acct.c +++ b/src/libnetfilter_acct.c @@ -181,13 +181,16 @@ const void *nfacct_attr_get(struct nfacct *nfacct, enum nfacct_attr_type type) switch(type) { case NFACCT_ATTR_NAME: - ret = nfacct->name; + if (nfacct->bitset & (1 << NFACCT_ATTR_NAME)) + ret = nfacct->name; break; case NFACCT_ATTR_PKTS: - ret = &nfacct->pkts; + if (nfacct->bitset & (1 << NFACCT_ATTR_PKTS)) + ret = &nfacct->pkts; break; case NFACCT_ATTR_BYTES: - ret = &nfacct->bytes; + if (nfacct->bitset & (1 << NFACCT_ATTR_BYTES)) + ret = &nfacct->bytes; break; } return ret; @@ -219,7 +222,8 @@ EXPORT_SYMBOL(nfacct_attr_get_str); */ uint64_t nfacct_attr_get_u64(struct nfacct *nfacct, enum nfacct_attr_type type) { - return *((uint64_t *)nfacct_attr_get(nfacct, type)); + const void *ret = nfacct_attr_get(nfacct, type); + return ret ? *((uint64_t *)ret) : 0; } EXPORT_SYMBOL(nfacct_attr_get_u64); -- cgit v1.2.3