extern void nr_rt_device_down(struct net_device *);
extern struct net_device *nr_dev_first(void);
extern struct net_device *nr_dev_get(ax25_address *);
-extern int nr_rt_ioctl(unsigned int, void *);
+extern int nr_rt_ioctl(unsigned int, void __user *);
extern void nr_link_failed(ax25_cb *, int);
extern int nr_route_frame(struct sk_buff *, ax25_cb *);
extern struct file_operations nr_nodes_fops;
static int nr_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
{
struct sock *sk = sock->sk;
+ void __user *argp = (void __user *)arg;
int ret;
lock_sock(sk);
if (amount < 0)
amount = 0;
release_sock(sk);
- return put_user(amount, (int *)arg);
+ return put_user(amount, (int __user *)argp);
}
case TIOCINQ: {
if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL)
amount = skb->len;
release_sock(sk);
- return put_user(amount, (int *)arg);
+ return put_user(amount, (int __user *)argp);
}
case SIOCGSTAMP:
ret = -EINVAL;
if (sk != NULL)
- ret = sock_get_timestamp(sk, (struct timeval __user *)arg);
+ ret = sock_get_timestamp(sk, argp);
release_sock(sk);
return ret;
case SIOCNRDECOBS:
release_sock(sk);
if (!capable(CAP_NET_ADMIN)) return -EPERM;
- return nr_rt_ioctl(cmd, (void *)arg);
+ return nr_rt_ioctl(cmd, argp);
default:
release_sock(sk);
- return dev_ioctl(cmd, (void __user *)arg);
+ return dev_ioctl(cmd, argp);
}
release_sock(sk);
/*
* Handle the ioctls that control the routing functions.
*/
-int nr_rt_ioctl(unsigned int cmd, void *arg)
+int nr_rt_ioctl(unsigned int cmd, void __user *arg)
{
struct nr_route_struct nr_route;
struct net_device *dev;