static int pfkey_broadcast(struct sk_buff *skb, int allocation, 
static int pfkey_broadcast(struct sk_buff *skb, unsigned int __nocast allocation, 
static int pfkey_broadcast(struct sk_buff *skb, int allocation,			   int broadcast_flags, struct sock *one_sk){	struct sock *sk;	struct hlist_node *node;	struct sk_buff *skb2 = NULL;	int err = -ESRCH;	/* XXX Do we need something like netlink_overrun?  I think	 * XXX PF_KEY socket apps will not mind current behavior.	 */	if (!skb)		return -ENOMEM;	pfkey_lock_table();	sk_for_each(sk, node, &pfkey_table) {		struct pfkey_sock *pfk = pfkey_sk(sk);		int err2;		/* Yes, it means that if you are meant to receive this		 * pfkey message you receive it twice as promiscuous		 * socket.		 */		if (pfk->promisc)			pfkey_broadcast_one(skb, &skb2, allocation, sk);		/* the exact target will be processed later */		if (sk == one_sk)			continue;		if (broadcast_flags != BROADCAST_ALL) {			if (broadcast_flags & BROADCAST_PROMISC_ONLY)				continue;			if ((broadcast_flags & BROADCAST_REGISTERED) &&			    !pfk->registered)				continue;			if (broadcast_flags & BROADCAST_ONE)				continue;		}		err2 = pfkey_broadcast_one(skb, &skb2, allocation, sk);		/* Error is cleare after succecful sending to at least one		 * registered KM */		if ((broadcast_flags & BROADCAST_REGISTERED) && err)			err = err2;	}	pfkey_unlock_table();	if (one_sk != NULL)		err = pfkey_broadcast_one(skb, &skb2, allocation, one_sk);	if (skb2)		kfree_skb(skb2);	kfree_skb(skb);	return err;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/00fa02334540ec795934737cd6e6ef8db2560731/af_key.c/buggy/net/key/af_key.c