nlh->nlmsg_seq, nlh, 0, 0); 
nlh->nlmsg_seq, 0, 0); 
int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr* nlh, void *arg){	struct rtattr **rta = arg;	int iif = 0;	int err = -ENOBUFS;	struct sk_buff *skb;	struct flowi fl;	struct rt6_info *rt;	skb = alloc_skb(NLMSG_GOODSIZE, GFP_KERNEL);	if (skb == NULL)		goto out;	/* Reserve room for dummy headers, this skb can pass	   through good chunk of routing engine.	 */	skb->mac.raw = skb->data;	skb_reserve(skb, MAX_HEADER + sizeof(struct ipv6hdr));	memset(&fl, 0, sizeof(fl));	if (rta[RTA_SRC-1])		ipv6_addr_copy(&fl.fl6_src,			       (struct in6_addr*)RTA_DATA(rta[RTA_SRC-1]));	if (rta[RTA_DST-1])		ipv6_addr_copy(&fl.fl6_dst,			       (struct in6_addr*)RTA_DATA(rta[RTA_DST-1]));	if (rta[RTA_IIF-1])		memcpy(&iif, RTA_DATA(rta[RTA_IIF-1]), sizeof(int));	if (iif) {		struct net_device *dev;		dev = __dev_get_by_index(iif);		if (!dev) {			err = -ENODEV;			goto out_free;		}	}	fl.oif = 0;	if (rta[RTA_OIF-1])		memcpy(&fl.oif, RTA_DATA(rta[RTA_OIF-1]), sizeof(int));	rt = (struct rt6_info*)ip6_route_output(NULL, &fl);	skb->dst = &rt->u.dst;	NETLINK_CB(skb).dst_pid = NETLINK_CB(in_skb).pid;	err = rt6_fill_node(skb, rt, 			    &fl.fl6_dst, &fl.fl6_src,			    iif,			    RTM_NEWROUTE, NETLINK_CB(in_skb).pid,			    nlh->nlmsg_seq, nlh, 0, 0);	if (err < 0) {		err = -EMSGSIZE;		goto out_free;	}	err = netlink_unicast(rtnl, skb, NETLINK_CB(in_skb).pid, MSG_DONTWAIT);	if (err > 0)		err = 0;out:	return err;out_free:	kfree_skb(skb);	goto out;	}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/0d51aa80a9b1db43920c0770c3bb842dd823c005/route.c/buggy/net/ipv6/route.c