From b674a8e78bf21985a05e17a3038f670bd8f46482 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Fri, 10 Jun 2016 14:47:53 +0200 Subject: src: check for strdup() errors from setters and parsers And pass up an error to the caller. Signed-off-by: Pablo Neira Ayuso --- src/set_elem.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/set_elem.c') diff --git a/src/set_elem.c b/src/set_elem.c index 7e3a995..1c8ea2b 100644 --- a/src/set_elem.c +++ b/src/set_elem.c @@ -118,6 +118,8 @@ int nftnl_set_elem_set(struct nftnl_set_elem *s, uint16_t attr, xfree(s->data.chain); s->data.chain = strdup(data); + if (!s->data.chain) + return -1; break; case NFTNL_SET_ELEM_DATA: /* NFTA_SET_ELEM_DATA */ memcpy(s->data.val, data, data_len); @@ -226,10 +228,16 @@ struct nftnl_set_elem *nftnl_set_elem_clone(struct nftnl_set_elem *elem) memcpy(newelem, elem, sizeof(*elem)); - if (elem->flags & (1 << NFTNL_SET_ELEM_CHAIN)) + if (elem->flags & (1 << NFTNL_SET_ELEM_CHAIN)) { newelem->data.chain = strdup(elem->data.chain); + if (!newelem->data.chain) + goto err; + } return newelem; +err: + nftnl_set_elem_free(newelem); + return NULL; } void nftnl_set_elem_nlmsg_build_payload(struct nlmsghdr *nlh, @@ -475,12 +483,16 @@ int nftnl_set_elems_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_set *s) xfree(s->table); s->table = strdup(mnl_attr_get_str(tb[NFTA_SET_ELEM_LIST_TABLE])); + if (!s->table) + return -1; s->flags |= (1 << NFTNL_SET_TABLE); } if (tb[NFTA_SET_ELEM_LIST_SET]) { xfree(s->name); s->name = strdup(mnl_attr_get_str(tb[NFTA_SET_ELEM_LIST_SET])); + if (!s->name) + return -1; s->flags |= (1 << NFTNL_SET_NAME); } if (tb[NFTA_SET_ELEM_LIST_SET_ID]) { -- cgit v1.2.3