summaryrefslogtreecommitdiffstats
path: root/net/netlink/af_netlink.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/netlink/af_netlink.c')
-rw-r--r--net/netlink/af_netlink.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index 81c53edda..3f02f4c3c 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -359,6 +359,7 @@ retry:
#ifdef NL_EMULATE_DEV
if (sk->protinfo.af_netlink.handler) {
+ skb_orphan(skb);
len = sk->protinfo.af_netlink.handler(protocol, skb);
netlink_unlock(sk);
return len;
@@ -370,7 +371,7 @@ retry:
if (nonblock) {
sti();
netlink_unlock(sk);
- kfree_skb(skb, 0);
+ kfree_skb(skb);
return -EAGAIN;
}
interruptible_sleep_on(sk->sleep);
@@ -378,7 +379,7 @@ retry:
sti();
if (signal_pending(current)) {
- kfree_skb(skb, 0);
+ kfree_skb(skb);
return -ERESTARTSYS;
}
goto retry;
@@ -392,7 +393,7 @@ Nprintk("unicast_deliver %d\n", skb->len);
netlink_unlock(sk);
return len;
}
- kfree_skb(skb, 0);
+ kfree_skb(skb);
return -ECONNREFUSED;
}
@@ -400,6 +401,7 @@ static __inline__ int netlink_broadcast_deliver(struct sock *sk, struct sk_buff
{
#ifdef NL_EMULATE_DEV
if (sk->protinfo.af_netlink.handler) {
+ skb_orphan(skb);
sk->protinfo.af_netlink.handler(sk->protocol, skb);
return 0;
} else
@@ -466,8 +468,8 @@ void netlink_broadcast(struct sock *ssk, struct sk_buff *skb, pid_t pid,
netlink_unlock_table(protocol, allocation == GFP_KERNEL);
if (skb2)
- kfree_skb(skb2, 0);
- kfree_skb(skb, 0);
+ kfree_skb(skb2);
+ kfree_skb(skb);
}
void netlink_set_err(struct sock *ssk, pid_t pid, unsigned group, int code)
@@ -630,7 +632,7 @@ netlink_kernel_create(int unit, void (*input)(struct sock *sk, int len))
static void netlink_destroy_callback(struct netlink_callback *cb)
{
if (cb->skb)
- kfree_skb(cb->skb, 0);
+ kfree_skb(cb->skb);
kfree(cb);
}
@@ -758,16 +760,13 @@ void netlink_detach(int unit)
int netlink_post(int unit, struct sk_buff *skb)
{
if (netlink_kernel[unit]) {
+ memset(skb->cb, 0, sizeof(skb->cb));
netlink_broadcast(netlink_kernel[unit]->sk, skb, 0, ~0, GFP_ATOMIC);
return 0;
}
return -EUNATCH;;
}
-EXPORT_SYMBOL(netlink_attach);
-EXPORT_SYMBOL(netlink_detach);
-EXPORT_SYMBOL(netlink_post);
-
#endif
#if 0