]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
libnftables: use-after-free in exit path
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 11 Sep 2019 11:52:43 +0000 (13:52 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 11 Sep 2019 11:55:33 +0000 (13:55 +0200)
==29699== Invalid read of size 8
==29699==    at 0x507E140: ct_label_table_exit (ct.c:239)
==29699==    by 0x5091877: nft_exit (libnftables.c:97)
==29699==    by 0x5091877: nft_ctx_free (libnftables.c:297)
[...]
==29699==  Address 0xb251008 is 136 bytes inside a block of size 352 free'd
==29699==    at 0x4C2CDDB: free (vg_replace_malloc.c:530)
==29699==    by 0x509186F: nft_ctx_free (libnftables.c:296)
[...]
==29699==  Block was alloc'd at
==29699==    at 0x4C2DBC5: calloc (vg_replace_malloc.c:711)
==29699==    by 0x508C51D: xmalloc (utils.c:36)
==29699==    by 0x508C51D: xzalloc (utils.c:65)
==29699==    by 0x50916BE: nft_ctx_new (libnftables.c:151)
[...]

Release symbol tables before context object.

Fixes: 45cb29a2ada4 ("src: remove global symbol_table")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
src/libnftables.c

index b169dd2f2afec1b1885ed7accab578c6a8be3fb7..a19636b22683641ec5d782c89786b7e2704fc7e7 100644 (file)
@@ -293,8 +293,8 @@ void nft_ctx_free(struct nft_ctx *ctx)
        cache_release(&ctx->cache);
        nft_ctx_clear_include_paths(ctx);
        xfree(ctx->state);
-       xfree(ctx);
        nft_exit(ctx);
+       xfree(ctx);
 }
 
 EXPORT_SYMBOL(nft_ctx_set_output);