kmalloc(size_dst, GFP_KERNEL); 
kmalloc(size_dst, GFP_ATOMIC); 
static void wrandom_set_nhinfo(__u32 network,			       __u32 netmask,			       unsigned char prefixlen,			       const struct fib_nh *nh){	const int state_idx = nh->nh_oif % MULTIPATH_STATE_SIZE;	struct multipath_route *r, *target_route = NULL;	struct multipath_dest *d, *target_dest = NULL;	/* store the weight information for a certain route */	spin_lock(&state[state_idx].lock);	/* find state entry for gateway or add one if necessary */	list_for_each_entry_rcu(r, &state[state_idx].head, list) {		if (r->gw == nh->nh_gw && r->oif == nh->nh_oif) {			target_route = r;			break;		}	}	if (!target_route) {		const size_t size_rt = sizeof(struct multipath_route);		target_route = (struct multipath_route *)			kmalloc(size_rt, GFP_KERNEL);		target_route->gw = nh->nh_gw;		target_route->oif = nh->nh_oif;		memset(&target_route->rcu, 0, sizeof(struct rcu_head));		INIT_LIST_HEAD(&target_route->dests);		list_add_rcu(&target_route->list, &state[state_idx].head);	}	/* find state entry for destination or add one if necessary */	list_for_each_entry_rcu(d, &target_route->dests, list) {		if (d->nh_info == nh) {			target_dest = d;			break;		}	}	if (!target_dest) {		const size_t size_dst = sizeof(struct multipath_dest);		target_dest = (struct multipath_dest*)			kmalloc(size_dst, GFP_KERNEL);		target_dest->nh_info = nh;		target_dest->network = network;		target_dest->netmask = netmask;		target_dest->prefixlen = prefixlen;		memset(&target_dest->rcu, 0, sizeof(struct rcu_head));		list_add_rcu(&target_dest->list, &target_route->dests);	}	/* else: we already stored this info for another destination =>	 * we are finished	 */	spin_unlock(&state[state_idx].lock);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/60d530655334369b62f260296a5ed1646a9529f0/multipath_wrandom.c/buggy/net/ipv4/multipath_wrandom.c