diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-08-20 14:51:12 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-08-20 15:03:46 +0200 |
commit | 244d60de2f16840afea17519a7b13b04c16f6acd (patch) | |
tree | 3a2f9a7afcc5d718894a7a829f42dbffd63cb424 /src | |
parent | b33cc22312b2d23cdc2a21912596206360c7ac06 (diff) |
utils: define xfree() as macro
Original description from Thomas Petazzoni:
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 convers xfree as a macro instead of
a function.
Reported-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/internal.h | 4 | ||||
-rw-r--r-- | src/utils.c | 5 |
2 files changed, 2 insertions, 7 deletions
diff --git a/src/internal.h b/src/internal.h index e76a5cb..c8dea7e 100644 --- a/src/internal.h +++ b/src/internal.h @@ -16,6 +16,8 @@ #include <libnftnl/common.h> #include <linux/netfilter/nf_tables.h> +#define xfree(ptr) free((void *)ptr); + #define BASE_DEC 10 #define BASE_HEX 16 @@ -144,8 +146,6 @@ int nft_event_footer_snprintf(char *buf, size_t bufsize, uint32_t format, uint32_t flags); int nft_event_footer_fprintf(FILE *fp, uint32_t format, uint32_t flags); -void xfree(const void *ptr); - struct expr_ops; struct nft_rule_expr { diff --git a/src/utils.c b/src/utils.c index 1878390..96c8bf2 100644 --- a/src/utils.c +++ b/src/utils.c @@ -180,11 +180,6 @@ int nft_str2verdict(const char *verdict, int *verdict_num) return -1; } -void xfree(const void *ptr) -{ - free((void *)ptr); -} - int nft_fprintf(FILE *fp, void *obj, uint32_t type, uint32_t flags, int (*snprintf_cb)(char *buf, size_t bufsiz, void *obj, uint32_t type, uint32_t flags)) |