if (rta.rta_mx) kfree(rta.rta_mx); 
kfree(rta.rta_mx); 
int ip_rt_ioctl(unsigned int cmd, void __user *arg){	int err;	struct kern_rta rta;	struct rtentry  r;	struct {		struct nlmsghdr nlh;		struct rtmsg	rtm;	} req;	switch (cmd) {	case SIOCADDRT:		/* Add a route */	case SIOCDELRT:		/* Delete a route */		if (!capable(CAP_NET_ADMIN))			return -EPERM;		if (copy_from_user(&r, arg, sizeof(struct rtentry)))			return -EFAULT;		rtnl_lock();		err = fib_convert_rtentry(cmd, &req.nlh, &req.rtm, &rta, &r);		if (err == 0) {			if (cmd == SIOCDELRT) {				struct fib_table *tb = fib_get_table(req.rtm.rtm_table);				err = -ESRCH;				if (tb)					err = tb->tb_delete(tb, &req.rtm, &rta, &req.nlh, NULL);			} else {				struct fib_table *tb = fib_new_table(req.rtm.rtm_table);				err = -ENOBUFS;				if (tb)					err = tb->tb_insert(tb, &req.rtm, &rta, &req.nlh, NULL);			}			if (rta.rta_mx)				kfree(rta.rta_mx);		}		rtnl_unlock();		return err;	}	return -EINVAL;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/a51482bde22f99c63fbbb57d5d46cc666384e379/fib_frontend.c/clean/net/ipv4/fib_frontend.c