|
@@ -443,7 +443,7 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue,
|
|
|
skb = alloc_skb(size, GFP_ATOMIC);
|
|
|
if (!skb) {
|
|
|
skb_tx_error(entskb);
|
|
|
- return NULL;
|
|
|
+ goto nlmsg_failure;
|
|
|
}
|
|
|
|
|
|
nlh = nlmsg_put(skb, 0, 0,
|
|
@@ -452,7 +452,7 @@ nfqnl_build_packet_message(struct net *net, 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->state.pf;
|
|
@@ -598,12 +598,17 @@ nfqnl_build_packet_message(struct net *net, 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;
|
|
|
}
|
|
|
|