*/
#include <linux/config.h>
#include <linux/module.h>
+#include <linux/moduleparam.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/socket.h>
*/
static int nr_setsockopt(struct socket *sock, int level, int optname,
- char *optval, int optlen)
+ char __user *optval, int optlen)
{
struct sock *sk = sock->sk;
nr_cb *nr = nr_sk(sk);
if (optlen < sizeof(int))
return -EINVAL;
- if (get_user(opt, (int *)optval))
+ if (get_user(opt, (int __user *)optval))
return -EFAULT;
switch (optname) {
}
static int nr_getsockopt(struct socket *sock, int level, int optname,
- char *optval, int *optlen)
+ char __user *optval, int __user *optlen)
{
struct sock *sk = sock->sk;
nr_cb *nr = nr_sk(sk);
remove_wait_queue(sk->sk_sleep, &wait);
newsk = skb->sk;
- newsk->sk_pair = NULL;
newsk->sk_socket = newsock;
newsk->sk_sleep = &newsock->wait;
nr_make->vl = 0;
nr_make->state = NR_STATE_3;
sk->sk_ack_backlog++;
- make->sk_pair = sk;
nr_insert_socket(make);
unsigned char *asmptr;
int size;
- if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR))
+ if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_EOR|MSG_CMSG_COMPAT))
return -EINVAL;
lock_sock(sk);
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 *)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 *)arg);
+ return dev_ioctl(cmd, argp);
}
release_sock(sk);
module_init(nr_proto_init);
-
-MODULE_PARM(nr_ndevs, "i");
+module_param(nr_ndevs, int, 0);
MODULE_PARM_DESC(nr_ndevs, "number of NET/ROM devices");
MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");