1 From 85dfe7dcd20c54e6d75d66a400f7ae038a52239b Mon Sep 17 00:00:00 2001
2 From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
3 Date: Mon, 29 Dec 2014 15:31:40 +0100
4 Subject: [PATCH 1/2] Rename xfree() to libnftnl_xfree() to avoid symbol naming
7 When ELF binaries and shared libraries are used, the internal
8 functions of libnftnl such as xfree() are not visible to the outside
9 world (their visibility is 'hidden'). Therefore, the fact that other
10 programs (especially nftables) may have symbols with the same name
11 does not cause any problem.
13 However, when doing static linking on a non-ELF platform (such as
14 Blackfin, which uses the FLAT binary format), there is no way of
15 encoding this visibility. Therefore, the xfree() symbols of libnftnl
16 becomes visible to the outside world, causing a conflict with the
17 xfree() symbol defined by nftables.
19 To solve this, this patch renames the libnftnl xfree() function to
22 Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
23 [Gustavo: update for version 1.0.3]
25 Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
27 src/chain.c | 18 +++++++++---------
30 src/expr/data_reg.c | 2 +-
31 src/expr/immediate.c | 2 +-
32 src/expr/log.c | 6 +++---
33 src/expr/match.c | 6 +++---
34 src/expr/target.c | 6 +++---
38 src/rule.c | 24 ++++++++++++------------
40 src/set.c | 18 +++++++++---------
41 src/set_elem.c | 10 +++++-----
42 src/table.c | 12 ++++++------
44 17 files changed, 59 insertions(+), 59 deletions(-)
46 diff --git a/src/chain.c b/src/chain.c
47 index b67385e..9ccde54 100644
50 @@ -89,11 +89,11 @@ EXPORT_SYMBOL(nft_chain_alloc);
51 void nft_chain_free(struct nft_chain *c)
55 + nftnl_xfree(c->table);
58 + nftnl_xfree(c->type);
63 EXPORT_SYMBOL(nft_chain_free);
65 @@ -111,7 +111,7 @@ void nft_chain_attr_unset(struct nft_chain *c, uint16_t attr)
67 case NFT_CHAIN_ATTR_TABLE:
70 + nftnl_xfree(c->table);
74 @@ -119,7 +119,7 @@ void nft_chain_attr_unset(struct nft_chain *c, uint16_t attr)
76 case NFT_CHAIN_ATTR_TYPE:
79 + nftnl_xfree(c->type);
83 @@ -164,7 +164,7 @@ void nft_chain_attr_set_data(struct nft_chain *c, uint16_t attr,
85 case NFT_CHAIN_ATTR_TABLE:
88 + nftnl_xfree(c->table);
90 c->table = strdup(data);
92 @@ -194,7 +194,7 @@ void nft_chain_attr_set_data(struct nft_chain *c, uint16_t attr,
94 case NFT_CHAIN_ATTR_TYPE:
97 + nftnl_xfree(c->type);
99 c->type = strdup(data);
101 @@ -915,7 +915,7 @@ void nft_chain_list_free(struct nft_chain_list *list)
108 EXPORT_SYMBOL(nft_chain_list_free);
110 @@ -994,6 +994,6 @@ EXPORT_SYMBOL(nft_chain_list_iter_next);
112 void nft_chain_list_iter_destroy(struct nft_chain_list_iter *iter)
117 EXPORT_SYMBOL(nft_chain_list_iter_destroy);
118 diff --git a/src/common.c b/src/common.c
119 index a6f2508..735b098 100644
122 @@ -48,7 +48,7 @@ EXPORT_SYMBOL(nft_parse_err_alloc);
124 void nft_parse_err_free(struct nft_parse_err *err)
129 EXPORT_SYMBOL(nft_parse_err_free);
131 diff --git a/src/expr.c b/src/expr.c
132 index 55557da..d23af01 100644
135 @@ -52,7 +52,7 @@ void nft_rule_expr_free(struct nft_rule_expr *expr)
137 expr->ops->free(expr);
142 EXPORT_SYMBOL(nft_rule_expr_free);
144 diff --git a/src/expr/data_reg.c b/src/expr/data_reg.c
145 index 33b3346..a217d77 100644
146 --- a/src/expr/data_reg.c
147 +++ b/src/expr/data_reg.c
148 @@ -130,7 +130,7 @@ static int nft_data_reg_verdict_xml_parse(union nft_data_reg *reg,
153 + nftnl_xfree(reg->chain);
155 reg->chain = strdup(chain);
157 diff --git a/src/expr/immediate.c b/src/expr/immediate.c
158 index 3d4e48c..d48a4e1 100644
159 --- a/src/expr/immediate.c
160 +++ b/src/expr/immediate.c
161 @@ -47,7 +47,7 @@ nft_rule_expr_immediate_set(struct nft_rule_expr *e, uint16_t type,
163 case NFT_EXPR_IMM_CHAIN:
165 - xfree(imm->data.chain);
166 + nftnl_xfree(imm->data.chain);
168 imm->data.chain = strdup(data);
170 diff --git a/src/expr/log.c b/src/expr/log.c
171 index 0a324c4..0eec1dc 100644
174 @@ -40,7 +40,7 @@ static int nft_rule_expr_log_set(struct nft_rule_expr *e, uint16_t type,
176 case NFT_EXPR_LOG_PREFIX:
178 - xfree(log->prefix);
179 + nftnl_xfree(log->prefix);
181 log->prefix = strdup(data);
183 @@ -154,7 +154,7 @@ nft_rule_expr_log_parse(struct nft_rule_expr *e, struct nlattr *attr)
185 if (tb[NFTA_LOG_PREFIX]) {
187 - xfree(log->prefix);
188 + nftnl_xfree(log->prefix);
190 log->prefix = strdup(mnl_attr_get_str(tb[NFTA_LOG_PREFIX]));
191 e->flags |= (1 << NFT_EXPR_LOG_PREFIX);
192 @@ -331,7 +331,7 @@ static void nft_rule_expr_log_free(struct nft_rule_expr *e)
194 struct nft_expr_log *log = nft_expr_data(e);
196 - xfree(log->prefix);
197 + nftnl_xfree(log->prefix);
200 struct expr_ops expr_ops_log = {
201 diff --git a/src/expr/match.c b/src/expr/match.c
202 index 26a368f..b452d06 100644
203 --- a/src/expr/match.c
204 +++ b/src/expr/match.c
205 @@ -53,7 +53,7 @@ nft_rule_expr_match_set(struct nft_rule_expr *e, uint16_t type,
207 case NFT_EXPR_MT_INFO:
210 + nftnl_xfree(mt->data);
213 mt->data_len = data_len;
214 @@ -150,7 +150,7 @@ static int nft_rule_expr_match_parse(struct nft_rule_expr *e, struct nlattr *att
218 - xfree(match->data);
219 + nftnl_xfree(match->data);
221 match_data = calloc(1, len);
222 if (match_data == NULL)
223 @@ -240,7 +240,7 @@ static void nft_rule_expr_match_free(struct nft_rule_expr *e)
225 struct nft_expr_match *match = nft_expr_data(e);
227 - xfree(match->data);
228 + nftnl_xfree(match->data);
231 struct expr_ops expr_ops_match = {
232 diff --git a/src/expr/target.c b/src/expr/target.c
233 index a79bc9e..bf836b7 100644
234 --- a/src/expr/target.c
235 +++ b/src/expr/target.c
236 @@ -53,7 +53,7 @@ nft_rule_expr_target_set(struct nft_rule_expr *e, uint16_t type,
238 case NFT_EXPR_TG_INFO:
241 + nftnl_xfree(tg->data);
244 tg->data_len = data_len;
245 @@ -150,7 +150,7 @@ static int nft_rule_expr_target_parse(struct nft_rule_expr *e, struct nlattr *at
249 - xfree(target->data);
250 + nftnl_xfree(target->data);
252 target_data = calloc(1, len);
253 if (target_data == NULL)
254 @@ -241,7 +241,7 @@ static void nft_rule_expr_target_free(struct nft_rule_expr *e)
256 struct nft_expr_target *target = nft_expr_data(e);
258 - xfree(target->data);
259 + nftnl_xfree(target->data);
262 struct expr_ops expr_ops_target = {
263 diff --git a/src/gen.c b/src/gen.c
264 index 21d3a49..515abc4 100644
267 @@ -37,7 +37,7 @@ EXPORT_SYMBOL(nft_gen_alloc);
269 void nft_gen_free(struct nft_gen *gen)
274 EXPORT_SYMBOL(nft_gen_free);
276 diff --git a/src/internal.h b/src/internal.h
277 index db9af11..898a7e7 100644
281 #include <libnftnl/common.h>
282 #include <linux/netfilter/nf_tables.h>
284 -#define xfree(ptr) free((void *)ptr);
285 +#define nftnl_xfree(ptr) free((void *)ptr);
289 diff --git a/src/mxml.c b/src/mxml.c
290 index a97d380..f4b5a05 100644
293 @@ -84,7 +84,7 @@ struct nft_rule_expr *nft_mxml_expr_parse(mxml_node_t *node,
296 tree = mxmlLoadString(NULL, xml_text, MXML_OPAQUE_CALLBACK);
298 + nftnl_xfree(xml_text);
302 diff --git a/src/rule.c b/src/rule.c
303 index c974f8b..56bf6ef 100644
306 @@ -75,11 +75,11 @@ void nft_rule_free(struct nft_rule *r)
307 nft_rule_expr_free(e);
309 if (r->table != NULL)
311 + nftnl_xfree(r->table);
312 if (r->chain != NULL)
314 + nftnl_xfree(r->chain);
319 EXPORT_SYMBOL(nft_rule_free);
321 @@ -97,13 +97,13 @@ void nft_rule_attr_unset(struct nft_rule *r, uint16_t attr)
323 case NFT_RULE_ATTR_TABLE:
326 + nftnl_xfree(r->table);
330 case NFT_RULE_ATTR_CHAIN:
333 + nftnl_xfree(r->chain);
337 @@ -139,13 +139,13 @@ void nft_rule_attr_set_data(struct nft_rule *r, uint16_t attr,
339 case NFT_RULE_ATTR_TABLE:
342 + nftnl_xfree(r->table);
344 r->table = strdup(data);
346 case NFT_RULE_ATTR_CHAIN:
349 + nftnl_xfree(r->chain);
351 r->chain = strdup(data);
353 @@ -395,7 +395,7 @@ static int nft_rule_parse_expr2(struct nlattr *attr, struct nft_rule *r)
355 if (tb[NFTA_EXPR_DATA]) {
356 if (expr->ops->parse(expr, tb[NFTA_EXPR_DATA]) < 0) {
362 @@ -491,7 +491,7 @@ int nft_rule_nlmsg_parse(const struct nlmsghdr *nlh, struct nft_rule *r)
363 mnl_attr_get_payload(tb[NFTA_RULE_USERDATA]);
366 - xfree(r->user.data);
367 + nftnl_xfree(r->user.data);
369 r->user.len = mnl_attr_get_payload_len(tb[NFTA_RULE_USERDATA]);
371 @@ -1064,7 +1064,7 @@ EXPORT_SYMBOL(nft_rule_expr_iter_next);
373 void nft_rule_expr_iter_destroy(struct nft_rule_expr_iter *iter)
378 EXPORT_SYMBOL(nft_rule_expr_iter_destroy);
380 @@ -1094,7 +1094,7 @@ void nft_rule_list_free(struct nft_rule_list *list)
387 EXPORT_SYMBOL(nft_rule_list_free);
389 @@ -1179,6 +1179,6 @@ EXPORT_SYMBOL(nft_rule_list_iter_next);
391 void nft_rule_list_iter_destroy(struct nft_rule_list_iter *iter)
396 EXPORT_SYMBOL(nft_rule_list_iter_destroy);
397 diff --git a/src/ruleset.c b/src/ruleset.c
398 index 6bb7582..e482e18 100644
401 @@ -48,7 +48,7 @@ void nft_ruleset_free(struct nft_ruleset *r)
402 nft_set_list_free(r->set_list);
403 if (r->flags & (1 << NFT_RULESET_ATTR_RULELIST))
404 nft_rule_list_free(r->rule_list);
408 EXPORT_SYMBOL(nft_ruleset_free);
410 diff --git a/src/set.c b/src/set.c
411 index 2385031..0355f99 100644
414 @@ -47,15 +47,15 @@ void nft_set_free(struct nft_set *s)
415 struct nft_set_elem *elem, *tmp;
417 if (s->table != NULL)
419 + nftnl_xfree(s->table);
422 + nftnl_xfree(s->name);
424 list_for_each_entry_safe(elem, tmp, &s->element_list, head) {
425 list_del(&elem->head);
426 nft_set_elem_free(elem);
431 EXPORT_SYMBOL(nft_set_free);
433 @@ -71,14 +71,14 @@ void nft_set_attr_unset(struct nft_set *s, uint16_t attr)
434 case NFT_SET_ATTR_TABLE:
435 if (s->flags & (1 << NFT_SET_ATTR_TABLE))
438 + nftnl_xfree(s->table);
442 case NFT_SET_ATTR_NAME:
443 if (s->flags & (1 << NFT_SET_ATTR_NAME))
446 + nftnl_xfree(s->name);
450 @@ -122,13 +122,13 @@ void nft_set_attr_set_data(struct nft_set *s, uint16_t attr, const void *data,
452 case NFT_SET_ATTR_TABLE:
455 + nftnl_xfree(s->table);
457 s->table = strdup(data);
459 case NFT_SET_ATTR_NAME:
462 + nftnl_xfree(s->name);
464 s->name = strdup(data);
466 @@ -963,7 +963,7 @@ void nft_set_list_free(struct nft_set_list *list)
473 EXPORT_SYMBOL(nft_set_list_free);
475 @@ -1047,7 +1047,7 @@ EXPORT_SYMBOL(nft_set_list_iter_next);
477 void nft_set_list_iter_destroy(struct nft_set_list_iter *iter)
482 EXPORT_SYMBOL(nft_set_list_iter_destroy);
484 diff --git a/src/set_elem.c b/src/set_elem.c
485 index 95f12bf..12d636e 100644
488 @@ -44,11 +44,11 @@ void nft_set_elem_free(struct nft_set_elem *s)
490 if (s->flags & (1 << NFT_SET_ELEM_ATTR_CHAIN)) {
492 - xfree(s->data.chain);
493 + nftnl_xfree(s->data.chain);
494 s->data.chain = NULL;
500 EXPORT_SYMBOL(nft_set_elem_free);
502 @@ -64,7 +64,7 @@ void nft_set_elem_attr_unset(struct nft_set_elem *s, uint16_t attr)
503 case NFT_SET_ELEM_ATTR_CHAIN:
504 if (s->flags & (1 << NFT_SET_ELEM_ATTR_CHAIN)) {
506 - xfree(s->data.chain);
507 + nftnl_xfree(s->data.chain);
508 s->data.chain = NULL;
511 @@ -98,7 +98,7 @@ void nft_set_elem_attr_set(struct nft_set_elem *s, uint16_t attr,
513 case NFT_SET_ELEM_ATTR_CHAIN: /* NFTA_SET_ELEM_DATA */
515 - xfree(s->data.chain);
516 + nftnl_xfree(s->data.chain);
518 s->data.chain = strdup(data);
520 @@ -716,7 +716,7 @@ EXPORT_SYMBOL(nft_set_elems_iter_next);
522 void nft_set_elems_iter_destroy(struct nft_set_elems_iter *iter)
527 EXPORT_SYMBOL(nft_set_elems_iter_destroy);
529 diff --git a/src/table.c b/src/table.c
530 index c93e6fb..c89bca1 100644
533 @@ -45,9 +45,9 @@ EXPORT_SYMBOL(nft_table_alloc);
534 void nft_table_free(struct nft_table *t)
536 if (t->flags & (1 << NFT_TABLE_ATTR_NAME))
538 + nftnl_xfree(t->name);
543 EXPORT_SYMBOL(nft_table_free);
545 @@ -65,7 +65,7 @@ void nft_table_attr_unset(struct nft_table *t, uint16_t attr)
547 case NFT_TABLE_ATTR_NAME:
550 + nftnl_xfree(t->name);
554 @@ -95,7 +95,7 @@ void nft_table_attr_set_data(struct nft_table *t, uint16_t attr,
556 case NFT_TABLE_ATTR_NAME:
559 + nftnl_xfree(t->name);
561 t->name = strdup(data);
563 @@ -486,7 +486,7 @@ void nft_table_list_free(struct nft_table_list *list)
570 EXPORT_SYMBOL(nft_table_list_free);
572 @@ -565,6 +565,6 @@ EXPORT_SYMBOL(nft_table_list_iter_next);
574 void nft_table_list_iter_destroy(struct nft_table_list_iter *iter)
579 EXPORT_SYMBOL(nft_table_list_iter_destroy);
580 diff --git a/src/utils.c b/src/utils.c
581 index 9013b68..7058269 100644
584 @@ -206,7 +206,7 @@ int nft_fprintf(FILE *fp, void *obj, uint32_t type, uint32_t flags,