mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 04:33:26 +02:00
netfilter: nf_queue: prefer nf_queue_entry_free
Instead of dropping refs+kfree, use the helper added in previous patch. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
committed by
Pablo Neira Ayuso
parent
af370ab36f
commit
28f715b9e6
@@ -155,18 +155,16 @@ static void nf_ip6_saveroute(const struct sk_buff *skb,
|
||||
static int __nf_queue(struct sk_buff *skb, const struct nf_hook_state *state,
|
||||
unsigned int index, unsigned int queuenum)
|
||||
{
|
||||
int status = -ENOENT;
|
||||
struct nf_queue_entry *entry = NULL;
|
||||
const struct nf_queue_handler *qh;
|
||||
struct net *net = state->net;
|
||||
unsigned int route_key_size;
|
||||
int status;
|
||||
|
||||
/* QUEUE == DROP if no one is waiting, to be safe. */
|
||||
qh = rcu_dereference(net->nf.queue_handler);
|
||||
if (!qh) {
|
||||
status = -ESRCH;
|
||||
goto err;
|
||||
}
|
||||
if (!qh)
|
||||
return -ESRCH;
|
||||
|
||||
switch (state->pf) {
|
||||
case AF_INET:
|
||||
@@ -181,14 +179,12 @@ static int __nf_queue(struct sk_buff *skb, const struct nf_hook_state *state,
|
||||
}
|
||||
|
||||
entry = kmalloc(sizeof(*entry) + route_key_size, GFP_ATOMIC);
|
||||
if (!entry) {
|
||||
status = -ENOMEM;
|
||||
goto err;
|
||||
}
|
||||
if (!entry)
|
||||
return -ENOMEM;
|
||||
|
||||
if (skb_dst(skb) && !skb_dst_force(skb)) {
|
||||
status = -ENETDOWN;
|
||||
goto err;
|
||||
kfree(entry);
|
||||
return -ENETDOWN;
|
||||
}
|
||||
|
||||
*entry = (struct nf_queue_entry) {
|
||||
@@ -212,17 +208,12 @@ static int __nf_queue(struct sk_buff *skb, const struct nf_hook_state *state,
|
||||
}
|
||||
|
||||
status = qh->outfn(entry, queuenum);
|
||||
|
||||
if (status < 0) {
|
||||
nf_queue_entry_release_refs(entry);
|
||||
goto err;
|
||||
nf_queue_entry_free(entry);
|
||||
return status;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
kfree(entry);
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Packets leaving via this function must come back through nf_reinject(). */
|
||||
|
Reference in New Issue
Block a user