diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2016-06-10 14:47:53 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2016-06-15 13:26:21 +0200 |
commit | b674a8e78bf21985a05e17a3038f670bd8f46482 (patch) | |
tree | c7372a22e1bc682b8a9f31b63c9e3b6700f53e68 /src/expr | |
parent | 8f4de3888ce74607d4754fe5a1a8f470af409c09 (diff) |
src: check for strdup() errors from setters and parsers
And pass up an error to the caller.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/expr')
-rw-r--r-- | src/expr/data_reg.c | 3 | ||||
-rw-r--r-- | src/expr/dynset.c | 4 | ||||
-rw-r--r-- | src/expr/immediate.c | 2 | ||||
-rw-r--r-- | src/expr/log.c | 4 | ||||
-rw-r--r-- | src/expr/lookup.c | 4 |
5 files changed, 17 insertions, 0 deletions
diff --git a/src/expr/data_reg.c b/src/expr/data_reg.c index 2a23285..6aa47bc 100644 --- a/src/expr/data_reg.c +++ b/src/expr/data_reg.c @@ -455,6 +455,9 @@ nftnl_parse_verdict(union nftnl_data_reg *data, const struct nlattr *attr, int * return -1; data->chain = strdup(mnl_attr_get_str(tb[NFTA_VERDICT_CHAIN])); + if (!data->chain) + return -1; + if (type) *type = DATA_CHAIN; break; diff --git a/src/expr/dynset.c b/src/expr/dynset.c index c8d97a5..0404359 100644 --- a/src/expr/dynset.c +++ b/src/expr/dynset.c @@ -53,6 +53,8 @@ nftnl_expr_dynset_set(struct nftnl_expr *e, uint16_t type, break; case NFTNL_EXPR_DYNSET_SET_NAME: dynset->set_name = strdup((const char *)data); + if (!dynset->set_name) + return -1; break; case NFTNL_EXPR_DYNSET_SET_ID: dynset->set_id = *((uint32_t *)data); @@ -183,6 +185,8 @@ nftnl_expr_dynset_parse(struct nftnl_expr *e, struct nlattr *attr) if (tb[NFTA_DYNSET_SET_NAME]) { dynset->set_name = strdup(mnl_attr_get_str(tb[NFTA_DYNSET_SET_NAME])); + if (!dynset->set_name) + return -1; e->flags |= (1 << NFTNL_EXPR_DYNSET_SET_NAME); } if (tb[NFTA_DYNSET_SET_ID]) { diff --git a/src/expr/immediate.c b/src/expr/immediate.c index eb2ca0f..243f0e0 100644 --- a/src/expr/immediate.c +++ b/src/expr/immediate.c @@ -47,6 +47,8 @@ nftnl_expr_immediate_set(struct nftnl_expr *e, uint16_t type, xfree(imm->data.chain); imm->data.chain = strdup(data); + if (!imm->data.chain) + return -1; break; default: return -1; diff --git a/src/expr/log.c b/src/expr/log.c index c3dc0a6..5b774a4 100644 --- a/src/expr/log.c +++ b/src/expr/log.c @@ -41,6 +41,8 @@ static int nftnl_expr_log_set(struct nftnl_expr *e, uint16_t type, xfree(log->prefix); log->prefix = strdup(data); + if (!log->prefix) + return -1; break; case NFTNL_EXPR_LOG_GROUP: log->group = *((uint16_t *)data); @@ -155,6 +157,8 @@ nftnl_expr_log_parse(struct nftnl_expr *e, struct nlattr *attr) xfree(log->prefix); log->prefix = strdup(mnl_attr_get_str(tb[NFTA_LOG_PREFIX])); + if (!log->prefix) + return -1; e->flags |= (1 << NFTNL_EXPR_LOG_PREFIX); } if (tb[NFTA_LOG_GROUP]) { diff --git a/src/expr/lookup.c b/src/expr/lookup.c index ed32ba6..727c287 100644 --- a/src/expr/lookup.c +++ b/src/expr/lookup.c @@ -43,6 +43,8 @@ nftnl_expr_lookup_set(struct nftnl_expr *e, uint16_t type, break; case NFTNL_EXPR_LOOKUP_SET: lookup->set_name = strdup((const char *)data); + if (!lookup->set_name) + return -1; break; case NFTNL_EXPR_LOOKUP_SET_ID: lookup->set_id = *((uint32_t *)data); @@ -137,6 +139,8 @@ nftnl_expr_lookup_parse(struct nftnl_expr *e, struct nlattr *attr) if (tb[NFTA_LOOKUP_SET]) { lookup->set_name = strdup(mnl_attr_get_str(tb[NFTA_LOOKUP_SET])); + if (!lookup->set_name) + return -1; e->flags |= (1 << NFTNL_EXPR_LOOKUP_SET); } if (tb[NFTA_LOOKUP_SET_ID]) { |