summaryrefslogtreecommitdiffstats
path: root/src/libnetfilter_acct.c
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2012-02-01 13:02:29 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2012-02-01 13:05:22 +0100
commitbdeb62656df74b5cf2069a24a9c3cc53d11fc85b (patch)
treec9b1cc9e1f822379326db7c37eb6856409d9ae3d /src/libnetfilter_acct.c
parent0c91e0b7341f28cfcf9240f6069dd68d488ae0ab (diff)
nfacct: check if attribute is set in nfacct_attr_get*
Instead of returning the data even if unset. Reported-by: Alejandro CastaƱo del Castillo <alex@wadobo.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/libnetfilter_acct.c')
-rw-r--r--src/libnetfilter_acct.c12
1 files 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);