netfilter: nfnetlink_queue: fix secctx memory leak 13/170913/1 accepted/tizen/unified/20180227.063123 submit/tizen/20180227.012056
authorLiping Zhang <zlpnobody@gmail.com>
Tue, 28 Mar 2017 14:59:25 +0000 (22:59 +0800)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Fri, 23 Feb 2018 07:14:42 +0000 (16:14 +0900)
We must call security_release_secctx to free the memory returned by
security_secid_to_secctx, otherwise memory may be leaked forever.

Fixes: ef493bd930ae ("netfilter: nfnetlink_queue: add security context information")
Signed-off-by: Liping Zhang <zlpnobody@gmail.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
[sw0312.kim: cherry-pick the commit 77c1c03c5b8 from mainline to fix already backported commit
 - the commit ef493bd930ae ("netfilter: nfnetlink_queue: add security context information") was backported for nether.service in tizen
 - change in net/netfilter/nfnetlink_queue.c is applied to net/netfilter/nfnetlink_queue_core.c]
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Change-Id: Ifbc5f96bb6039503b7390864936fe6eda2e53acb

net/netfilter/nfnetlink_queue_core.c

index 8c6ffd186f05c89fe11a9521a1b30885c13ffd75..afc6ccb18a46ecf391446f9560bec214b8b697ad 100644 (file)
@@ -421,7 +421,7 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue,
                                  GFP_ATOMIC);
        if (!skb) {
                skb_tx_error(entskb);
-               return NULL;
+               goto nlmsg_failure;
        }
 
        nlh = nlmsg_put(skb, 0, 0,
@@ -430,7 +430,7 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue,
        if (!nlh) {
                skb_tx_error(entskb);
                kfree_skb(skb);
-               return NULL;
+               goto nlmsg_failure;
        }
        nfmsg = nlmsg_data(nlh);
        nfmsg->nfgen_family = entry->pf;
@@ -560,12 +560,17 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue,
        }
 
        nlh->nlmsg_len = skb->len;
+       if (seclen)
+               security_release_secctx(secdata, seclen);
        return skb;
 
 nla_put_failure:
        skb_tx_error(entskb);
        kfree_skb(skb);
        net_err_ratelimited("nf_queue: error creating packet message\n");
+nlmsg_failure:
+       if (seclen)
+               security_release_secctx(secdata, seclen);
        return NULL;
 }