From 90a0152c224fa90f648b27187859bd84f6426e1b Mon Sep 17 00:00:00 2001
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Date: Thu, 2 Jun 2016 23:03:27 -0300
Subject: [PATCH] Rename xfree() to libnftnl_xfree() to avoid symbol naming
 conflict

When ELF binaries and shared libraries are used, the internal
functions of libnftnl such as xfree() are not visible to the outside
world (their visibility is 'hidden'). Therefore, the fact that other
programs (especially nftables) may have symbols with the same name
does not cause any problem.

However, when doing static linking on a non-ELF platform (such as
Blackfin, which uses the FLAT binary format), there is no way of
encoding this visibility. Therefore, the xfree() symbols of libnftnl
becomes visible to the outside world, causing a conflict with the
xfree() symbol defined by nftables.

To solve this, this patch renames the libnftnl xfree() function to
libnftnl_xfree().

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
[Gustavo: update for version 1.0.7]
Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar>
[baruch: update for versions 1.0.9, 1.1.2]
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
---
 include/utils.h         |  2 +-
 src/chain.c             | 36 ++++++++++++++++++------------------
 src/common.c            |  2 +-
 src/expr.c              |  4 ++--
 src/expr/data_reg.c     |  2 +-
 src/expr/dynset.c       |  2 +-
 src/expr/flow_offload.c |  2 +-
 src/expr/immediate.c    |  2 +-
 src/expr/log.c          |  6 +++---
 src/expr/lookup.c       |  2 +-
 src/expr/match.c        |  6 +++---
 src/expr/target.c       |  6 +++---
 src/flowtable.c         | 32 ++++++++++++++++----------------
 src/gen.c               |  2 +-
 src/object.c            | 14 +++++++-------
 src/rule.c              | 32 ++++++++++++++++----------------
 src/ruleset.c           |  2 +-
 src/set.c               | 28 ++++++++++++++--------------
 src/set_elem.c          | 28 ++++++++++++++--------------
 src/table.c             | 14 +++++++-------
 src/trace.c             | 14 +++++++-------
 src/udata.c             |  2 +-
 src/utils.c             |  2 +-
 23 files changed, 121 insertions(+), 121 deletions(-)

diff --git a/include/utils.h b/include/utils.h
index 3cc659652fe2..820556715013 100644
--- a/include/utils.h
+++ b/include/utils.h
@@ -17,7 +17,7 @@
 
 #define __noreturn	__attribute__((__noreturn__))
 
-#define xfree(ptr)	free((void *)ptr);
+#define nftnl_xfree(ptr)	free((void *)ptr);
 
 #define div_round_up(n, d)	(((n) + (d) - 1) / (d))
 
diff --git a/src/chain.c b/src/chain.c
index 01d62c84f140..93e193955934 100644
--- a/src/chain.c
+++ b/src/chain.c
@@ -97,14 +97,14 @@ EXPORT_SYMBOL(nftnl_chain_free);
 void nftnl_chain_free(const struct nftnl_chain *c)
 {
 	if (c->flags & (1 << NFTNL_CHAIN_NAME))
-		xfree(c->name);
+		nftnl_xfree(c->name);
 	if (c->flags & (1 << NFTNL_CHAIN_TABLE))
-		xfree(c->table);
+		nftnl_xfree(c->table);
 	if (c->flags & (1 << NFTNL_CHAIN_TYPE))
-		xfree(c->type);
+		nftnl_xfree(c->type);
 	if (c->flags & (1 << NFTNL_CHAIN_DEV))
-		xfree(c->dev);
-	xfree(c);
+		nftnl_xfree(c->dev);
+	nftnl_xfree(c);
 }
 
 EXPORT_SYMBOL(nftnl_chain_is_set);
@@ -121,15 +121,15 @@ void nftnl_chain_unset(struct nftnl_chain *c, uint16_t attr)
 
 	switch (attr) {
 	case NFTNL_CHAIN_NAME:
-		xfree(c->name);
+		nftnl_xfree(c->name);
 		break;
 	case NFTNL_CHAIN_TABLE:
-		xfree(c->table);
+		nftnl_xfree(c->table);
 		break;
 	case NFTNL_CHAIN_USE:
 		break;
 	case NFTNL_CHAIN_TYPE:
-		xfree(c->type);
+		nftnl_xfree(c->type);
 		break;
 	case NFTNL_CHAIN_HOOKNUM:
 	case NFTNL_CHAIN_PRIO:
@@ -140,7 +140,7 @@ void nftnl_chain_unset(struct nftnl_chain *c, uint16_t attr)
 	case NFTNL_CHAIN_FAMILY:
 		break;
 	case NFTNL_CHAIN_DEV:
-		xfree(c->dev);
+		nftnl_xfree(c->dev);
 		break;
 	default:
 		return;
@@ -169,7 +169,7 @@ int nftnl_chain_set_data(struct nftnl_chain *c, uint16_t attr,
 	switch(attr) {
 	case NFTNL_CHAIN_NAME:
 		if (c->flags & (1 << NFTNL_CHAIN_NAME))
-			xfree(c->name);
+			nftnl_xfree(c->name);
 
 		c->name = strdup(data);
 		if (!c->name)
@@ -177,7 +177,7 @@ int nftnl_chain_set_data(struct nftnl_chain *c, uint16_t attr,
 		break;
 	case NFTNL_CHAIN_TABLE:
 		if (c->flags & (1 << NFTNL_CHAIN_TABLE))
-			xfree(c->table);
+			nftnl_xfree(c->table);
 
 		c->table = strdup(data);
 		if (!c->table)
@@ -209,7 +209,7 @@ int nftnl_chain_set_data(struct nftnl_chain *c, uint16_t attr,
 		break;
 	case NFTNL_CHAIN_TYPE:
 		if (c->flags & (1 << NFTNL_CHAIN_TYPE))
-			xfree(c->type);
+			nftnl_xfree(c->type);
 
 		c->type = strdup(data);
 		if (!c->type)
@@ -217,7 +217,7 @@ int nftnl_chain_set_data(struct nftnl_chain *c, uint16_t attr,
 		break;
 	case NFTNL_CHAIN_DEV:
 		if (c->flags & (1 << NFTNL_CHAIN_DEV))
-			xfree(c->dev);
+			nftnl_xfree(c->dev);
 
 		c->dev = strdup(data);
 		if (!c->dev)
@@ -541,7 +541,7 @@ int nftnl_chain_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_chain *c)
 
 	if (tb[NFTA_CHAIN_NAME]) {
 		if (c->flags & (1 << NFTNL_CHAIN_NAME))
-			xfree(c->name);
+			nftnl_xfree(c->name);
 		c->name = strdup(mnl_attr_get_str(tb[NFTA_CHAIN_NAME]));
 		if (!c->name)
 			return -1;
@@ -549,7 +549,7 @@ int nftnl_chain_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_chain *c)
 	}
 	if (tb[NFTA_CHAIN_TABLE]) {
 		if (c->flags & (1 << NFTNL_CHAIN_TABLE))
-			xfree(c->table);
+			nftnl_xfree(c->table);
 		c->table = strdup(mnl_attr_get_str(tb[NFTA_CHAIN_TABLE]));
 		if (!c->table)
 			return -1;
@@ -579,7 +579,7 @@ int nftnl_chain_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_chain *c)
 	}
 	if (tb[NFTA_CHAIN_TYPE]) {
 		if (c->flags & (1 << NFTNL_CHAIN_TYPE))
-			xfree(c->type);
+			nftnl_xfree(c->type);
 		c->type = strdup(mnl_attr_get_str(tb[NFTA_CHAIN_TYPE]));
 		if (!c->type)
 			return -1;
@@ -711,7 +711,7 @@ void nftnl_chain_list_free(struct nftnl_chain_list *list)
 		list_del(&r->head);
 		nftnl_chain_free(r);
 	}
-	xfree(list);
+	nftnl_xfree(list);
 }
 
 EXPORT_SYMBOL(nftnl_chain_list_is_empty);
@@ -797,5 +797,5 @@ struct nftnl_chain *nftnl_chain_list_iter_next(struct nftnl_chain_list_iter *ite
 EXPORT_SYMBOL(nftnl_chain_list_iter_destroy);
 void nftnl_chain_list_iter_destroy(struct nftnl_chain_list_iter *iter)
 {
-	xfree(iter);
+	nftnl_xfree(iter);
 }
diff --git a/src/common.c b/src/common.c
index feb13b2aa836..de7e9d08b9e2 100644
--- a/src/common.c
+++ b/src/common.c
@@ -68,7 +68,7 @@ struct nftnl_parse_err *nftnl_parse_err_alloc(void)
 EXPORT_SYMBOL(nftnl_parse_err_free);
 void nftnl_parse_err_free(struct nftnl_parse_err *err)
 {
-	xfree(err);
+	nftnl_xfree(err);
 }
 
 EXPORT_SYMBOL(nftnl_parse_perror);
diff --git a/src/expr.c b/src/expr.c
index 80c4c36a9bd7..f5e44cd16349 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -51,7 +51,7 @@ void nftnl_expr_free(const struct nftnl_expr *expr)
 	if (expr->ops->free)
 		expr->ops->free(expr);
 
-	xfree(expr);
+	nftnl_xfree(expr);
 }
 
 EXPORT_SYMBOL(nftnl_expr_is_set);
@@ -260,7 +260,7 @@ struct nftnl_expr *nftnl_expr_parse(struct nlattr *attr)
 	return expr;
 
 err2:
-	xfree(expr);
+	nftnl_xfree(expr);
 err1:
 	return NULL;
 }
diff --git a/src/expr/data_reg.c b/src/expr/data_reg.c
index 67165feb931f..c6f3cec48caf 100644
--- a/src/expr/data_reg.c
+++ b/src/expr/data_reg.c
@@ -225,7 +225,7 @@ void nftnl_free_verdict(const union nftnl_data_reg *data)
 	switch(data->verdict) {
 	case NFT_JUMP:
 	case NFT_GOTO:
-		xfree(data->chain);
+		nftnl_xfree(data->chain);
 		break;
 	default:
 		break;
diff --git a/src/expr/dynset.c b/src/expr/dynset.c
index 68115ba50c94..4e8093b7e9db 100644
--- a/src/expr/dynset.c
+++ b/src/expr/dynset.c
@@ -276,7 +276,7 @@ static void nftnl_expr_dynset_free(const struct nftnl_expr *e)
 {
 	struct nftnl_expr_dynset *dynset = nftnl_expr_data(e);
 
-	xfree(dynset->set_name);
+	nftnl_xfree(dynset->set_name);
 }
 
 struct expr_ops expr_ops_dynset = {
diff --git a/src/expr/flow_offload.c b/src/expr/flow_offload.c
index 6ccec9a13396..877ad072ba53 100644
--- a/src/expr/flow_offload.c
+++ b/src/expr/flow_offload.c
@@ -122,7 +122,7 @@ static void nftnl_expr_flow_free(const struct nftnl_expr *e)
 {
 	struct nftnl_expr_flow *flow = nftnl_expr_data(e);
 
-	xfree(flow->table_name);
+	nftnl_xfree(flow->table_name);
 }
 
 struct expr_ops expr_ops_flow = {
diff --git a/src/expr/immediate.c b/src/expr/immediate.c
index 47106ae86675..b0289f9397fb 100644
--- a/src/expr/immediate.c
+++ b/src/expr/immediate.c
@@ -44,7 +44,7 @@ nftnl_expr_immediate_set(struct nftnl_expr *e, uint16_t type,
 		break;
 	case NFTNL_EXPR_IMM_CHAIN:
 		if (e->flags & (1 << NFTNL_EXPR_IMM_CHAIN))
-			xfree(imm->data.chain);
+			nftnl_xfree(imm->data.chain);
 
 		imm->data.chain = strdup(data);
 		if (!imm->data.chain)
diff --git a/src/expr/log.c b/src/expr/log.c
index bbe43d2dc6bc..a5952ce10ccc 100644
--- a/src/expr/log.c
+++ b/src/expr/log.c
@@ -39,7 +39,7 @@ static int nftnl_expr_log_set(struct nftnl_expr *e, uint16_t type,
 	switch(type) {
 	case NFTNL_EXPR_LOG_PREFIX:
 		if (log->flags & (1 << NFTNL_EXPR_LOG_PREFIX))
-			xfree(log->prefix);
+			nftnl_xfree(log->prefix);
 
 		log->prefix = strdup(data);
 		if (!log->prefix)
@@ -155,7 +155,7 @@ nftnl_expr_log_parse(struct nftnl_expr *e, struct nlattr *attr)
 
 	if (tb[NFTA_LOG_PREFIX]) {
 		if (log->prefix)
-			xfree(log->prefix);
+			nftnl_xfree(log->prefix);
 
 		log->prefix = strdup(mnl_attr_get_str(tb[NFTA_LOG_PREFIX]));
 		if (!log->prefix)
@@ -255,7 +255,7 @@ static void nftnl_expr_log_free(const struct nftnl_expr *e)
 {
 	struct nftnl_expr_log *log = nftnl_expr_data(e);
 
-	xfree(log->prefix);
+	nftnl_xfree(log->prefix);
 }
 
 struct expr_ops expr_ops_log = {
diff --git a/src/expr/lookup.c b/src/expr/lookup.c
index a495ac0fdcfc..4fce24288c57 100644
--- a/src/expr/lookup.c
+++ b/src/expr/lookup.c
@@ -209,7 +209,7 @@ static void nftnl_expr_lookup_free(const struct nftnl_expr *e)
 {
 	struct nftnl_expr_lookup *lookup = nftnl_expr_data(e);
 
-	xfree(lookup->set_name);
+	nftnl_xfree(lookup->set_name);
 }
 
 struct expr_ops expr_ops_lookup = {
diff --git a/src/expr/match.c b/src/expr/match.c
index 4fa74b2da893..7ee706753b68 100644
--- a/src/expr/match.c
+++ b/src/expr/match.c
@@ -50,7 +50,7 @@ nftnl_expr_match_set(struct nftnl_expr *e, uint16_t type,
 		break;
 	case NFTNL_EXPR_MT_INFO:
 		if (e->flags & (1 << NFTNL_EXPR_MT_INFO))
-			xfree(mt->data);
+			nftnl_xfree(mt->data);
 
 		mt->data = data;
 		mt->data_len = data_len;
@@ -147,7 +147,7 @@ static int nftnl_expr_match_parse(struct nftnl_expr *e, struct nlattr *attr)
 		void *match_data;
 
 		if (e->flags & (1 << NFTNL_EXPR_MT_INFO))
-			xfree(match->data);
+			nftnl_xfree(match->data);
 
 		match_data = calloc(1, len);
 		if (match_data == NULL)
@@ -186,7 +186,7 @@ static void nftnl_expr_match_free(const struct nftnl_expr *e)
 {
 	struct nftnl_expr_match *match = nftnl_expr_data(e);
 
-	xfree(match->data);
+	nftnl_xfree(match->data);
 }
 
 struct expr_ops expr_ops_match = {
diff --git a/src/expr/target.c b/src/expr/target.c
index 91000386704a..5d0763edf63f 100644
--- a/src/expr/target.c
+++ b/src/expr/target.c
@@ -50,7 +50,7 @@ nftnl_expr_target_set(struct nftnl_expr *e, uint16_t type,
 		break;
 	case NFTNL_EXPR_TG_INFO:
 		if (e->flags & (1 << NFTNL_EXPR_TG_INFO))
-			xfree(tg->data);
+			nftnl_xfree(tg->data);
 
 		tg->data = data;
 		tg->data_len = data_len;
@@ -147,7 +147,7 @@ static int nftnl_expr_target_parse(struct nftnl_expr *e, struct nlattr *attr)
 		void *target_data;
 
 		if (target->data)
-			xfree(target->data);
+			nftnl_xfree(target->data);
 
 		target_data = calloc(1, len);
 		if (target_data == NULL)
@@ -186,7 +186,7 @@ static void nftnl_expr_target_free(const struct nftnl_expr *e)
 {
 	struct nftnl_expr_target *target = nftnl_expr_data(e);
 
-	xfree(target->data);
+	nftnl_xfree(target->data);
 }
 
 struct expr_ops expr_ops_target = {
diff --git a/src/flowtable.c b/src/flowtable.c
index c939306b56c4..f1b3eef48b73 100644
--- a/src/flowtable.c
+++ b/src/flowtable.c
@@ -45,16 +45,16 @@ void nftnl_flowtable_free(const struct nftnl_flowtable *c)
 	int i;
 
 	if (c->flags & (1 << NFTNL_FLOWTABLE_NAME))
-		xfree(c->name);
+		nftnl_xfree(c->name);
 	if (c->flags & (1 << NFTNL_FLOWTABLE_TABLE))
-		xfree(c->table);
+		nftnl_xfree(c->table);
 	if (c->flags & (1 << NFTNL_FLOWTABLE_DEVICES)) {
 		for (i = 0; i < c->dev_array_len; i++)
-			xfree(c->dev_array[i]);
+			nftnl_xfree(c->dev_array[i]);
 
-		xfree(c->dev_array);
+		nftnl_xfree(c->dev_array);
 	}
-	xfree(c);
+	nftnl_xfree(c);
 }
 EXPORT_SYMBOL(nftnl_flowtable_free);
 
@@ -73,10 +73,10 @@ void nftnl_flowtable_unset(struct nftnl_flowtable *c, uint16_t attr)
 
 	switch (attr) {
 	case NFTNL_FLOWTABLE_NAME:
-		xfree(c->name);
+		nftnl_xfree(c->name);
 		break;
 	case NFTNL_FLOWTABLE_TABLE:
-		xfree(c->table);
+		nftnl_xfree(c->table);
 		break;
 	case NFTNL_FLOWTABLE_HOOKNUM:
 	case NFTNL_FLOWTABLE_PRIO:
@@ -86,8 +86,8 @@ void nftnl_flowtable_unset(struct nftnl_flowtable *c, uint16_t attr)
 		break;
 	case NFTNL_FLOWTABLE_DEVICES:
 		for (i = 0; i < c->dev_array_len; i++) {
-			xfree(c->dev_array[i]);
-			xfree(c->dev_array);
+			nftnl_xfree(c->dev_array[i]);
+			nftnl_xfree(c->dev_array);
 		}
 		break;
 	default:
@@ -117,7 +117,7 @@ int nftnl_flowtable_set_data(struct nftnl_flowtable *c, uint16_t attr,
 	switch(attr) {
 	case NFTNL_FLOWTABLE_NAME:
 		if (c->flags & (1 << NFTNL_FLOWTABLE_NAME))
-			xfree(c->name);
+			nftnl_xfree(c->name);
 
 		c->name = strdup(data);
 		if (!c->name)
@@ -125,7 +125,7 @@ int nftnl_flowtable_set_data(struct nftnl_flowtable *c, uint16_t attr,
 		break;
 	case NFTNL_FLOWTABLE_TABLE:
 		if (c->flags & (1 << NFTNL_FLOWTABLE_TABLE))
-			xfree(c->table);
+			nftnl_xfree(c->table);
 
 		c->table = strdup(data);
 		if (!c->table)
@@ -147,8 +147,8 @@ int nftnl_flowtable_set_data(struct nftnl_flowtable *c, uint16_t attr,
 
 		if (c->flags & (1 << NFTNL_FLOWTABLE_DEVICES)) {
 			for (i = 0; i < c->dev_array_len; i++) {
-				xfree(c->dev_array[i]);
-				xfree(c->dev_array);
+				nftnl_xfree(c->dev_array[i]);
+				nftnl_xfree(c->dev_array);
 			}
 		}
 
@@ -423,7 +423,7 @@ int nftnl_flowtable_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_flowtab
 
 	if (tb[NFTA_FLOWTABLE_NAME]) {
 		if (c->flags & (1 << NFTNL_FLOWTABLE_NAME))
-			xfree(c->name);
+			nftnl_xfree(c->name);
 		c->name = strdup(mnl_attr_get_str(tb[NFTA_FLOWTABLE_NAME]));
 		if (!c->name)
 			return -1;
@@ -431,7 +431,7 @@ int nftnl_flowtable_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_flowtab
 	}
 	if (tb[NFTA_FLOWTABLE_TABLE]) {
 		if (c->flags & (1 << NFTNL_FLOWTABLE_TABLE))
-			xfree(c->table);
+			nftnl_xfree(c->table);
 		c->table = strdup(mnl_attr_get_str(tb[NFTA_FLOWTABLE_TABLE]));
 		if (!c->table)
 			return -1;
@@ -635,7 +635,7 @@ void nftnl_flowtable_list_free(struct nftnl_flowtable_list *list)
 		list_del(&s->head);
 		nftnl_flowtable_free(s);
 	}
-	xfree(list);
+	nftnl_xfree(list);
 }
 EXPORT_SYMBOL(nftnl_flowtable_list_free);
 
diff --git a/src/gen.c b/src/gen.c
index 1fc909930d86..c69f6f87deae 100644
--- a/src/gen.c
+++ b/src/gen.c
@@ -38,7 +38,7 @@ struct nftnl_gen *nftnl_gen_alloc(void)
 EXPORT_SYMBOL(nftnl_gen_free);
 void nftnl_gen_free(const struct nftnl_gen *gen)
 {
-	xfree(gen);
+	nftnl_xfree(gen);
 }
 
 EXPORT_SYMBOL(nftnl_gen_is_set);
diff --git a/src/object.c b/src/object.c
index e88203a82441..28e04486c76c 100644
--- a/src/object.c
+++ b/src/object.c
@@ -53,11 +53,11 @@ EXPORT_SYMBOL(nftnl_obj_free);
 void nftnl_obj_free(const struct nftnl_obj *obj)
 {
 	if (obj->flags & (1 << NFTNL_OBJ_TABLE))
-		xfree(obj->table);
+		nftnl_xfree(obj->table);
 	if (obj->flags & (1 << NFTNL_OBJ_NAME))
-		xfree(obj->name);
+		nftnl_xfree(obj->name);
 
-	xfree(obj);
+	nftnl_xfree(obj);
 }
 
 EXPORT_SYMBOL(nftnl_obj_is_set);
@@ -81,11 +81,11 @@ void nftnl_obj_set_data(struct nftnl_obj *obj, uint16_t attr,
 
 	switch (attr) {
 	case NFTNL_OBJ_TABLE:
-		xfree(obj->table);
+		nftnl_xfree(obj->table);
 		obj->table = strdup(data);
 		break;
 	case NFTNL_OBJ_NAME:
-		xfree(obj->name);
+		nftnl_xfree(obj->name);
 		obj->name = strdup(data);
 		break;
 	case NFTNL_OBJ_TYPE:
@@ -452,7 +452,7 @@ void nftnl_obj_list_free(struct nftnl_obj_list *list)
 		list_del(&r->head);
 		nftnl_obj_free(r);
 	}
-	xfree(list);
+	nftnl_xfree(list);
 }
 
 EXPORT_SYMBOL(nftnl_obj_list_is_empty);
@@ -539,5 +539,5 @@ struct nftnl_obj *nftnl_obj_list_iter_next(struct nftnl_obj_list_iter *iter)
 EXPORT_SYMBOL(nftnl_obj_list_iter_destroy);
 void nftnl_obj_list_iter_destroy(struct nftnl_obj_list_iter *iter)
 {
-	xfree(iter);
+	nftnl_xfree(iter);
 }
diff --git a/src/rule.c b/src/rule.c
index 9af8fae2a803..0fce46e5c944 100644
--- a/src/rule.c
+++ b/src/rule.c
@@ -75,13 +75,13 @@ void nftnl_rule_free(const struct nftnl_rule *r)
 		nftnl_expr_free(e);
 
 	if (r->flags & (1 << (NFTNL_RULE_TABLE)))
-		xfree(r->table);
+		nftnl_xfree(r->table);
 	if (r->flags & (1 << (NFTNL_RULE_CHAIN)))
-		xfree(r->chain);
+		nftnl_xfree(r->chain);
 	if (r->flags & (1 << (NFTNL_RULE_USERDATA)))
-		xfree(r->user.data);
+		nftnl_xfree(r->user.data);
 
-	xfree(r);
+	nftnl_xfree(r);
 }
 
 EXPORT_SYMBOL(nftnl_rule_is_set);
@@ -98,10 +98,10 @@ void nftnl_rule_unset(struct nftnl_rule *r, uint16_t attr)
 
 	switch (attr) {
 	case NFTNL_RULE_TABLE:
-		xfree(r->table);
+		nftnl_xfree(r->table);
 		break;
 	case NFTNL_RULE_CHAIN:
-		xfree(r->chain);
+		nftnl_xfree(r->chain);
 		break;
 	case NFTNL_RULE_HANDLE:
 	case NFTNL_RULE_COMPAT_PROTO:
@@ -111,7 +111,7 @@ void nftnl_rule_unset(struct nftnl_rule *r, uint16_t attr)
 	case NFTNL_RULE_ID:
 		break;
 	case NFTNL_RULE_USERDATA:
-		xfree(r->user.data);
+		nftnl_xfree(r->user.data);
 		break;
 	}
 
@@ -137,7 +137,7 @@ int nftnl_rule_set_data(struct nftnl_rule *r, uint16_t attr,
 	switch(attr) {
 	case NFTNL_RULE_TABLE:
 		if (r->flags & (1 << NFTNL_RULE_TABLE))
-			xfree(r->table);
+			nftnl_xfree(r->table);
 
 		r->table = strdup(data);
 		if (!r->table)
@@ -145,7 +145,7 @@ int nftnl_rule_set_data(struct nftnl_rule *r, uint16_t attr,
 		break;
 	case NFTNL_RULE_CHAIN:
 		if (r->flags & (1 << NFTNL_RULE_CHAIN))
-			xfree(r->chain);
+			nftnl_xfree(r->chain);
 
 		r->chain = strdup(data);
 		if (!r->chain)
@@ -168,7 +168,7 @@ int nftnl_rule_set_data(struct nftnl_rule *r, uint16_t attr,
 		break;
 	case NFTNL_RULE_USERDATA:
 		if (r->flags & (1 << NFTNL_RULE_USERDATA))
-			xfree(r->user.data);
+			nftnl_xfree(r->user.data);
 
 		r->user.data = malloc(data_len);
 		if (!r->user.data)
@@ -453,7 +453,7 @@ int nftnl_rule_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_rule *r)
 
 	if (tb[NFTA_RULE_TABLE]) {
 		if (r->flags & (1 << NFTNL_RULE_TABLE))
-			xfree(r->table);
+			nftnl_xfree(r->table);
 		r->table = strdup(mnl_attr_get_str(tb[NFTA_RULE_TABLE]));
 		if (!r->table)
 			return -1;
@@ -461,7 +461,7 @@ int nftnl_rule_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_rule *r)
 	}
 	if (tb[NFTA_RULE_CHAIN]) {
 		if (r->flags & (1 << NFTNL_RULE_CHAIN))
-			xfree(r->chain);
+			nftnl_xfree(r->chain);
 		r->chain = strdup(mnl_attr_get_str(tb[NFTA_RULE_CHAIN]));
 		if (!r->chain)
 			return -1;
@@ -490,7 +490,7 @@ int nftnl_rule_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_rule *r)
 			mnl_attr_get_payload(tb[NFTA_RULE_USERDATA]);
 
 		if (r->flags & (1 << NFTNL_RULE_USERDATA))
-			xfree(r->user.data);
+			nftnl_xfree(r->user.data);
 
 		r->user.len = mnl_attr_get_payload_len(tb[NFTA_RULE_USERDATA]);
 
@@ -737,7 +737,7 @@ struct nftnl_expr *nftnl_expr_iter_next(struct nftnl_expr_iter *iter)
 EXPORT_SYMBOL(nftnl_expr_iter_destroy);
 void nftnl_expr_iter_destroy(struct nftnl_expr_iter *iter)
 {
-	xfree(iter);
+	nftnl_xfree(iter);
 }
 
 struct nftnl_rule_list {
@@ -767,7 +767,7 @@ void nftnl_rule_list_free(struct nftnl_rule_list *list)
 		list_del(&r->head);
 		nftnl_rule_free(r);
 	}
-	xfree(list);
+	nftnl_xfree(list);
 }
 
 EXPORT_SYMBOL(nftnl_rule_list_is_empty);
@@ -865,5 +865,5 @@ struct nftnl_rule *nftnl_rule_list_iter_next(struct nftnl_rule_list_iter *iter)
 EXPORT_SYMBOL(nftnl_rule_list_iter_destroy);
 void nftnl_rule_list_iter_destroy(const struct nftnl_rule_list_iter *iter)
 {
-	xfree(iter);
+	nftnl_xfree(iter);
 }
diff --git a/src/ruleset.c b/src/ruleset.c
index 2468bd46cd5d..16059a305309 100644
--- a/src/ruleset.c
+++ b/src/ruleset.c
@@ -70,7 +70,7 @@ void nftnl_ruleset_free(const struct nftnl_ruleset *r)
 		nftnl_set_list_free(r->set_list);
 	if (r->flags & (1 << NFTNL_RULESET_RULELIST))
 		nftnl_rule_list_free(r->rule_list);
-	xfree(r);
+	nftnl_xfree(r);
 }
 
 EXPORT_SYMBOL(nftnl_ruleset_is_set);
diff --git a/src/set.c b/src/set.c
index d1bdb165ab4b..53e54715d4b8 100644
--- a/src/set.c
+++ b/src/set.c
@@ -46,17 +46,17 @@ void nftnl_set_free(const struct nftnl_set *s)
 	struct nftnl_set_elem *elem, *tmp;
 
 	if (s->flags & (1 << NFTNL_SET_TABLE))
-		xfree(s->table);
+		nftnl_xfree(s->table);
 	if (s->flags & (1 << NFTNL_SET_NAME))
-		xfree(s->name);
+		nftnl_xfree(s->name);
 	if (s->flags & (1 << NFTNL_SET_USERDATA))
-		xfree(s->user.data);
+		nftnl_xfree(s->user.data);
 
 	list_for_each_entry_safe(elem, tmp, &s->element_list, head) {
 		list_del(&elem->head);
 		nftnl_set_elem_free(elem);
 	}
-	xfree(s);
+	nftnl_xfree(s);
 }
 
 EXPORT_SYMBOL(nftnl_set_is_set);
@@ -73,10 +73,10 @@ void nftnl_set_unset(struct nftnl_set *s, uint16_t attr)
 
 	switch (attr) {
 	case NFTNL_SET_TABLE:
-		xfree(s->table);
+		nftnl_xfree(s->table);
 		break;
 	case NFTNL_SET_NAME:
-		xfree(s->name);
+		nftnl_xfree(s->name);
 		break;
 	case NFTNL_SET_HANDLE:
 	case NFTNL_SET_FLAGS:
@@ -93,7 +93,7 @@ void nftnl_set_unset(struct nftnl_set *s, uint16_t attr)
 	case NFTNL_SET_GC_INTERVAL:
 		break;
 	case NFTNL_SET_USERDATA:
-		xfree(s->user.data);
+		nftnl_xfree(s->user.data);
 		break;
 	default:
 		return;
@@ -127,7 +127,7 @@ int nftnl_set_set_data(struct nftnl_set *s, uint16_t attr, const void *data,
 	switch(attr) {
 	case NFTNL_SET_TABLE:
 		if (s->flags & (1 << NFTNL_SET_TABLE))
-			xfree(s->table);
+			nftnl_xfree(s->table);
 
 		s->table = strdup(data);
 		if (!s->table)
@@ -135,7 +135,7 @@ int nftnl_set_set_data(struct nftnl_set *s, uint16_t attr, const void *data,
 		break;
 	case NFTNL_SET_NAME:
 		if (s->flags & (1 << NFTNL_SET_NAME))
-			xfree(s->name);
+			nftnl_xfree(s->name);
 
 		s->name = strdup(data);
 		if (!s->name)
@@ -182,7 +182,7 @@ int nftnl_set_set_data(struct nftnl_set *s, uint16_t attr, const void *data,
 		break;
 	case NFTNL_SET_USERDATA:
 		if (s->flags & (1 << NFTNL_SET_USERDATA))
-			xfree(s->user.data);
+			nftnl_xfree(s->user.data);
 
 		s->user.data = malloc(data_len);
 		if (!s->user.data)
@@ -492,7 +492,7 @@ int nftnl_set_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_set *s)
 
 	if (tb[NFTA_SET_TABLE]) {
 		if (s->flags & (1 << NFTNL_SET_TABLE))
-			xfree(s->table);
+			nftnl_xfree(s->table);
 		s->table = strdup(mnl_attr_get_str(tb[NFTA_SET_TABLE]));
 		if (!s->table)
 			return -1;
@@ -500,7 +500,7 @@ int nftnl_set_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_set *s)
 	}
 	if (tb[NFTA_SET_NAME]) {
 		if (s->flags & (1 << NFTNL_SET_NAME))
-			xfree(s->name);
+			nftnl_xfree(s->name);
 		s->name = strdup(mnl_attr_get_str(tb[NFTA_SET_NAME]));
 		if (!s->name)
 			return -1;
@@ -742,7 +742,7 @@ void nftnl_set_list_free(struct nftnl_set_list *list)
 		list_del(&s->head);
 		nftnl_set_free(s);
 	}
-	xfree(list);
+	nftnl_xfree(list);
 }
 
 EXPORT_SYMBOL(nftnl_set_list_is_empty);
@@ -834,7 +834,7 @@ struct nftnl_set *nftnl_set_list_iter_next(struct nftnl_set_list_iter *iter)
 EXPORT_SYMBOL(nftnl_set_list_iter_destroy);
 void nftnl_set_list_iter_destroy(const struct nftnl_set_list_iter *iter)
 {
-	xfree(iter);
+	nftnl_xfree(iter);
 }
 
 static struct nftnl_set *nftnl_set_lookup(const char *this_set_name,
diff --git a/src/set_elem.c b/src/set_elem.c
index ff983a67d62a..fac96cd368f1 100644
--- a/src/set_elem.c
+++ b/src/set_elem.c
@@ -43,18 +43,18 @@ EXPORT_SYMBOL(nftnl_set_elem_free);
 void nftnl_set_elem_free(struct nftnl_set_elem *s)
 {
 	if (s->flags & (1 << NFTNL_SET_ELEM_CHAIN))
-		xfree(s->data.chain);
+		nftnl_xfree(s->data.chain);
 
 	if (s->flags & (1 << NFTNL_SET_ELEM_EXPR))
 		nftnl_expr_free(s->expr);
 
 	if (s->flags & (1 << NFTNL_SET_ELEM_USERDATA))
-		xfree(s->user.data);
+		nftnl_xfree(s->user.data);
 
 	if (s->flags & (1 << NFTNL_SET_ELEM_OBJREF))
-		xfree(s->objref);
+		nftnl_xfree(s->objref);
 
-	xfree(s);
+	nftnl_xfree(s);
 }
 
 EXPORT_SYMBOL(nftnl_set_elem_is_set);
@@ -71,7 +71,7 @@ void nftnl_set_elem_unset(struct nftnl_set_elem *s, uint16_t attr)
 
 	switch (attr) {
 	case NFTNL_SET_ELEM_CHAIN:
-		xfree(s->data.chain);
+		nftnl_xfree(s->data.chain);
 		break;
 	case NFTNL_SET_ELEM_FLAGS:
 	case NFTNL_SET_ELEM_KEY:	/* NFTA_SET_ELEM_KEY */
@@ -81,13 +81,13 @@ void nftnl_set_elem_unset(struct nftnl_set_elem *s, uint16_t attr)
 	case NFTNL_SET_ELEM_EXPIRATION:	/* NFTA_SET_ELEM_EXPIRATION */
 		break;
 	case NFTNL_SET_ELEM_USERDATA:	/* NFTA_SET_ELEM_USERDATA */
-		xfree(s->user.data);
+		nftnl_xfree(s->user.data);
 		break;
 	case NFTNL_SET_ELEM_EXPR:
 		nftnl_expr_free(s->expr);
 		break;
 	case NFTNL_SET_ELEM_OBJREF:
-		xfree(s->objref);
+		nftnl_xfree(s->objref);
 		break;
 	default:
 		return;
@@ -113,7 +113,7 @@ int nftnl_set_elem_set(struct nftnl_set_elem *s, uint16_t attr,
 		break;
 	case NFTNL_SET_ELEM_CHAIN:	/* NFTA_SET_ELEM_DATA */
 		if (s->flags & (1 << NFTNL_SET_ELEM_CHAIN))
-			xfree(s->data.chain);
+			nftnl_xfree(s->data.chain);
 
 		s->data.chain = strdup(data);
 		if (!s->data.chain)
@@ -128,7 +128,7 @@ int nftnl_set_elem_set(struct nftnl_set_elem *s, uint16_t attr,
 		break;
 	case NFTNL_SET_ELEM_USERDATA: /* NFTA_SET_ELEM_USERDATA */
 		if (s->flags & (1 << NFTNL_SET_ELEM_USERDATA))
-			xfree(s->user.data);
+			nftnl_xfree(s->user.data);
 
 		s->user.data = malloc(data_len);
 		if (!s->user.data)
@@ -138,7 +138,7 @@ int nftnl_set_elem_set(struct nftnl_set_elem *s, uint16_t attr,
 		break;
 	case NFTNL_SET_ELEM_OBJREF:
 		if (s->flags & (1 << NFTNL_SET_ELEM_OBJREF))
-			xfree(s->objref);
+			nftnl_xfree(s->objref);
 
 		s->objref = strdup(data);
 		if (!s->objref)
@@ -436,7 +436,7 @@ static int nftnl_set_elems_parse2(struct nftnl_set *s, const struct nlattr *nest
 			mnl_attr_get_payload(tb[NFTA_SET_ELEM_USERDATA]);
 
 		if (e->flags & (1 << NFTNL_RULE_USERDATA))
-			xfree(e->user.data);
+			nftnl_xfree(e->user.data);
 
 		e->user.len  = mnl_attr_get_payload_len(tb[NFTA_SET_ELEM_USERDATA]);
 		e->user.data = malloc(e->user.len);
@@ -521,7 +521,7 @@ int nftnl_set_elems_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_set *s)
 
 	if (tb[NFTA_SET_ELEM_LIST_TABLE]) {
 		if (s->flags & (1 << NFTNL_SET_TABLE))
-			xfree(s->table);
+			nftnl_xfree(s->table);
 		s->table =
 			strdup(mnl_attr_get_str(tb[NFTA_SET_ELEM_LIST_TABLE]));
 		if (!s->table)
@@ -530,7 +530,7 @@ int nftnl_set_elems_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_set *s)
 	}
 	if (tb[NFTA_SET_ELEM_LIST_SET]) {
 		if (s->flags & (1 << NFTNL_SET_NAME))
-			xfree(s->name);
+			nftnl_xfree(s->name);
 		s->name =
 			strdup(mnl_attr_get_str(tb[NFTA_SET_ELEM_LIST_SET]));
 		if (!s->name)
@@ -729,7 +729,7 @@ struct nftnl_set_elem *nftnl_set_elems_iter_next(struct nftnl_set_elems_iter *it
 EXPORT_SYMBOL(nftnl_set_elems_iter_destroy);
 void nftnl_set_elems_iter_destroy(struct nftnl_set_elems_iter *iter)
 {
-	xfree(iter);
+	nftnl_xfree(iter);
 }
 
 static bool nftnl_attr_nest_overflow(struct nlmsghdr *nlh,
diff --git a/src/table.c b/src/table.c
index 54259eec7d06..888991b1b80d 100644
--- a/src/table.c
+++ b/src/table.c
@@ -47,9 +47,9 @@ EXPORT_SYMBOL(nftnl_table_free);
 void nftnl_table_free(const struct nftnl_table *t)
 {
 	if (t->flags & (1 << NFTNL_TABLE_NAME))
-		xfree(t->name);
+		nftnl_xfree(t->name);
 
-	xfree(t);
+	nftnl_xfree(t);
 }
 
 EXPORT_SYMBOL(nftnl_table_is_set);
@@ -66,7 +66,7 @@ void nftnl_table_unset(struct nftnl_table *t, uint16_t attr)
 
 	switch (attr) {
 	case NFTNL_TABLE_NAME:
-		xfree(t->name);
+		nftnl_xfree(t->name);
 		break;
 	case NFTNL_TABLE_FLAGS:
 	case NFTNL_TABLE_HANDLE:
@@ -94,7 +94,7 @@ int nftnl_table_set_data(struct nftnl_table *t, uint16_t attr,
 	switch (attr) {
 	case NFTNL_TABLE_NAME:
 		if (t->flags & (1 << NFTNL_TABLE_NAME))
-			xfree(t->name);
+			nftnl_xfree(t->name);
 
 		t->name = strdup(data);
 		if (!t->name)
@@ -258,7 +258,7 @@ int nftnl_table_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_table *t)
 
 	if (tb[NFTA_TABLE_NAME]) {
 		if (t->flags & (1 << NFTNL_TABLE_NAME))
-			xfree(t->name);
+			nftnl_xfree(t->name);
 		t->name = strdup(mnl_attr_get_str(tb[NFTA_TABLE_NAME]));
 		if (!t->name)
 			return -1;
@@ -395,7 +395,7 @@ void nftnl_table_list_free(struct nftnl_table_list *list)
 		list_del(&r->head);
 		nftnl_table_free(r);
 	}
-	xfree(list);
+	nftnl_xfree(list);
 }
 
 EXPORT_SYMBOL(nftnl_table_list_is_empty);
@@ -481,5 +481,5 @@ struct nftnl_table *nftnl_table_list_iter_next(struct nftnl_table_list_iter *ite
 EXPORT_SYMBOL(nftnl_table_list_iter_destroy);
 void nftnl_table_list_iter_destroy(const struct nftnl_table_list_iter *iter)
 {
-	xfree(iter);
+	nftnl_xfree(iter);
 }
diff --git a/src/trace.c b/src/trace.c
index f4264377508e..8a18391d83d1 100644
--- a/src/trace.c
+++ b/src/trace.c
@@ -61,13 +61,13 @@ struct nftnl_trace *nftnl_trace_alloc(void)
 EXPORT_SYMBOL(nftnl_trace_free);
 void nftnl_trace_free(const struct nftnl_trace *t)
 {
-	xfree(t->chain);
-	xfree(t->table);
-	xfree(t->jump_target);
-	xfree(t->ll.data);
-	xfree(t->nh.data);
-	xfree(t->th.data);
-	xfree(t);
+	nftnl_xfree(t->chain);
+	nftnl_xfree(t->table);
+	nftnl_xfree(t->jump_target);
+	nftnl_xfree(t->ll.data);
+	nftnl_xfree(t->nh.data);
+	nftnl_xfree(t->th.data);
+	nftnl_xfree(t);
 }
 
 EXPORT_SYMBOL(nftnl_trace_is_set);
diff --git a/src/udata.c b/src/udata.c
index b5a47295b40d..3b3be548036d 100644
--- a/src/udata.c
+++ b/src/udata.c
@@ -33,7 +33,7 @@ struct nftnl_udata_buf *nftnl_udata_buf_alloc(uint32_t data_size)
 EXPORT_SYMBOL(nftnl_udata_buf_free);
 void nftnl_udata_buf_free(const struct nftnl_udata_buf *buf)
 {
-	xfree(buf);
+	nftnl_xfree(buf);
 }
 
 EXPORT_SYMBOL(nftnl_udata_buf_len);
diff --git a/src/utils.c b/src/utils.c
index f641bf93ec68..02e7476a0ced 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -304,7 +304,7 @@ int nftnl_fprintf(FILE *fp, const void *obj, uint32_t cmd, uint32_t type,
 
 out:
 	if (buf != _buf)
-		xfree(buf);
+		nftnl_xfree(buf);
 
 	return ret;
 }
-- 
2.19.1

