if (iml) sock_kfree_s(sk, iml, sizeof(*iml)); 
int ip_mc_join_group(struct sock *sk , struct ip_mreqn *imr){	int err;	u32 addr = imr->imr_multiaddr.s_addr;	struct ip_mc_socklist *iml, *i;	struct in_device *in_dev;	struct inet_sock *inet = inet_sk(sk);	int count = 0;	if (!MULTICAST(addr))		return -EINVAL;	rtnl_shlock();	in_dev = ip_mc_find_dev(imr);	if (!in_dev) {		iml = NULL;		err = -ENODEV;		goto done;	}	iml = (struct ip_mc_socklist *)sock_kmalloc(sk, sizeof(*iml), GFP_KERNEL);	err = -EADDRINUSE;	for (i = inet->mc_list; i; i = i->next) {		if (memcmp(&i->multi, imr, sizeof(*imr)) == 0) {			/* New style additions are reference counted */			if (imr->imr_address.s_addr == 0) {				i->count++;				err = 0;			}			goto done;		}		count++;	}	err = -ENOBUFS;	if (iml == NULL || count >= sysctl_igmp_max_memberships)		goto done;	memcpy(&iml->multi, imr, sizeof(*imr));	iml->next = inet->mc_list;	iml->count = 1;	iml->sflist = NULL;	iml->sfmode = MCAST_EXCLUDE;	inet->mc_list = iml;	ip_mc_inc_group(in_dev, addr);	iml = NULL;	err = 0;done:	rtnl_shunlock();	if (iml)		sock_kfree_s(sk, iml, sizeof(*iml));	return err;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/ca9b907d140a5f249250d19f956129dbbbf84f73/igmp.c/buggy/net/ipv4/igmp.c