struct nlattr *tb[NFTA_COMPAT_MAX+1] = {};
struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
- mnl_attr_parse(nlh, sizeof(*nfg), data_attr_cb, tb);
+ if (mnl_attr_parse(nlh, sizeof(*nfg), data_attr_cb, tb) < 0)
+ return MNL_CB_ERROR;
if (tb[NFTA_COMPAT_NAME])
printf("name=%s ", mnl_attr_get_str(tb[NFTA_COMPAT_NAME]));
struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
int ret = 0;
- mnl_attr_parse(nlh, sizeof(*nfg), nft_chain_parse_attr_cb, tb);
+ if (mnl_attr_parse(nlh, sizeof(*nfg), nft_chain_parse_attr_cb, tb) < 0)
+ return -1;
+
if (tb[NFTA_CHAIN_NAME]) {
strncpy(c->name, mnl_attr_get_str(tb[NFTA_CHAIN_NAME]),
NFT_CHAIN_MAXNAMELEN);
c->table = strdup(mnl_attr_get_str(tb[NFTA_CHAIN_TABLE]));
c->flags |= (1 << NFT_CHAIN_ATTR_TABLE);
}
- if (tb[NFTA_CHAIN_HOOK])
+ if (tb[NFTA_CHAIN_HOOK]) {
ret = nft_chain_parse_hook(tb[NFTA_CHAIN_HOOK], c);
+ if (ret < 0)
+ return ret;
+ }
if (tb[NFTA_CHAIN_POLICY]) {
c->policy = ntohl(mnl_attr_get_u32(tb[NFTA_CHAIN_POLICY]));
c->flags |= (1 << NFT_CHAIN_ATTR_POLICY);
c->use = ntohl(mnl_attr_get_u32(tb[NFTA_CHAIN_USE]));
c->flags |= (1 << NFT_CHAIN_ATTR_USE);
}
- if (tb[NFTA_CHAIN_COUNTERS])
+ if (tb[NFTA_CHAIN_COUNTERS]) {
ret = nft_chain_parse_counters(tb[NFTA_CHAIN_COUNTERS], c);
+ if (ret < 0)
+ return ret;
+ }
if (tb[NFTA_CHAIN_HANDLE]) {
c->handle = be64toh(mnl_attr_get_u64(tb[NFTA_CHAIN_HANDLE]));
c->flags |= (1 << NFT_CHAIN_ATTR_HANDLE);
struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
int ret = 0;
- mnl_attr_parse(nlh, sizeof(*nfg), nft_rule_parse_attr_cb, tb);
+ if (mnl_attr_parse(nlh, sizeof(*nfg), nft_rule_parse_attr_cb, tb) < 0)
+ return -1;
+
if (tb[NFTA_RULE_TABLE]) {
r->table = strdup(mnl_attr_get_str(tb[NFTA_RULE_TABLE]));
r->flags |= (1 << NFT_RULE_ATTR_TABLE);
{
struct nlattr *tb[NFTA_SET_MAX+1] = {};
struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
- int ret = 0;
- mnl_attr_parse(nlh, sizeof(*nfg), nft_set_parse_attr_cb, tb);
+ if (mnl_attr_parse(nlh, sizeof(*nfg), nft_set_parse_attr_cb, tb) < 0)
+ return -1;
+
if (tb[NFTA_SET_TABLE]) {
s->table = strdup(mnl_attr_get_str(tb[NFTA_SET_TABLE]));
s->flags |= (1 << NFT_SET_ATTR_TABLE);
s->family = nfg->nfgen_family;
s->flags |= (1 << NFT_SET_ATTR_FAMILY);
- return ret;
+ return 0;
}
EXPORT_SYMBOL(nft_set_nlmsg_parse);
if (e == NULL)
return -1;
- mnl_attr_parse_nested(nest, nft_set_elem_parse_attr_cb, tb);
+ if (mnl_attr_parse_nested(nest, nft_set_elem_parse_attr_cb, tb) < 0) {
+ nft_set_elem_free(e);
+ return -1;
+ }
+
if (tb[NFTA_SET_ELEM_FLAGS]) {
e->set_elem_flags =
ntohl(mnl_attr_get_u32(tb[NFTA_SET_ELEM_FLAGS]));
struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
int ret = 0;
- mnl_attr_parse(nlh, sizeof(*nfg), nft_set_elem_list_parse_attr_cb, tb);
+ if (mnl_attr_parse(nlh, sizeof(*nfg),
+ nft_set_elem_list_parse_attr_cb, tb) < 0)
+ return -1;
+
if (tb[NFTA_SET_ELEM_LIST_TABLE]) {
s->table =
strdup(mnl_attr_get_str(tb[NFTA_SET_ELEM_LIST_TABLE]));
struct nlattr *tb[NFTA_TABLE_MAX+1] = {};
struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
- mnl_attr_parse(nlh, sizeof(*nfg), nft_table_parse_attr_cb, tb);
+ if (mnl_attr_parse(nlh, sizeof(*nfg), nft_table_parse_attr_cb, tb) < 0)
+ return -1;
+
if (tb[NFTA_TABLE_NAME]) {
t->name = strdup(mnl_attr_get_str(tb[NFTA_TABLE_NAME]));
t->flags |= (1 << NFT_TABLE_ATTR_NAME);