appletalk: factor out a atrtr_ioctl_addrt helper

Add a helper than can be shared with the upcoming compat ioctl handler.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Christoph Hellwig 2020-05-18 08:28:07 +02:00 committed by David S. Miller
parent 3986912f6a
commit a500492354
1 changed files with 20 additions and 13 deletions

View File

@ -867,6 +867,24 @@ static int atif_ioctl(int cmd, void __user *arg)
return copy_to_user(arg, &atreq, sizeof(atreq)) ? -EFAULT : 0; return copy_to_user(arg, &atreq, sizeof(atreq)) ? -EFAULT : 0;
} }
static int atrtr_ioctl_addrt(struct rtentry *rt)
{
struct net_device *dev = NULL;
if (rt->rt_dev) {
char name[IFNAMSIZ];
if (copy_from_user(name, rt->rt_dev, IFNAMSIZ-1))
return -EFAULT;
name[IFNAMSIZ-1] = '\0';
dev = __dev_get_by_name(&init_net, name);
if (!dev)
return -ENODEV;
}
return atrtr_create(rt, dev);
}
/* Routing ioctl() calls */ /* Routing ioctl() calls */
static int atrtr_ioctl(unsigned int cmd, void __user *arg) static int atrtr_ioctl(unsigned int cmd, void __user *arg)
{ {
@ -882,19 +900,8 @@ static int atrtr_ioctl(unsigned int cmd, void __user *arg)
return atrtr_delete(&((struct sockaddr_at *) return atrtr_delete(&((struct sockaddr_at *)
&rt.rt_dst)->sat_addr); &rt.rt_dst)->sat_addr);
case SIOCADDRT: { case SIOCADDRT:
struct net_device *dev = NULL; return atrtr_ioctl_addrt(&rt);
if (rt.rt_dev) {
char name[IFNAMSIZ];
if (copy_from_user(name, rt.rt_dev, IFNAMSIZ-1))
return -EFAULT;
name[IFNAMSIZ-1] = '\0';
dev = __dev_get_by_name(&init_net, name);
if (!dev)
return -ENODEV;
}
return atrtr_create(&rt, dev);
}
} }
return -EINVAL; return -EINVAL;
} }