vserver 1.9.3
[linux-2.6.git] / net / netrom / af_netrom.c
index bb5ac58..62ff798 100644 (file)
@@ -10,6 +10,7 @@
  */
 #include <linux/config.h>
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/errno.h>
 #include <linux/types.h>
 #include <linux/socket.h>
@@ -297,7 +298,7 @@ void nr_destroy_socket(struct sock *sk)
  */
 
 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);
@@ -309,7 +310,7 @@ static int nr_setsockopt(struct socket *sock, int level, int optname,
        if (optlen < sizeof(int))
                return -EINVAL;
 
-       if (get_user(opt, (int *)optval))
+       if (get_user(opt, (int __user *)optval))
                return -EFAULT;
 
        switch (optname) {
@@ -349,7 +350,7 @@ static int nr_setsockopt(struct socket *sock, int level, int 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);
@@ -800,7 +801,6 @@ static int nr_accept(struct socket *sock, struct socket *newsock, int flags)
        remove_wait_queue(sk->sk_sleep, &wait);
 
        newsk = skb->sk;
-       newsk->sk_pair = NULL;
        newsk->sk_socket = newsock;
        newsk->sk_sleep = &newsock->wait;
 
@@ -993,7 +993,6 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
        nr_make->vl        = 0;
        nr_make->state     = NR_STATE_3;
        sk->sk_ack_backlog++;
-       make->sk_pair = sk;
 
        nr_insert_socket(make);
 
@@ -1021,7 +1020,7 @@ static int nr_sendmsg(struct kiocb *iocb, struct socket *sock,
        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);
@@ -1176,6 +1175,7 @@ static int nr_recvmsg(struct kiocb *iocb, struct socket *sock,
 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);
@@ -1186,7 +1186,7 @@ static int nr_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
                if (amount < 0)
                        amount = 0;
                release_sock(sk);
-               return put_user(amount, (int *)arg);
+               return put_user(amount, (int __user *)argp);
        }
 
        case TIOCINQ: {
@@ -1196,13 +1196,13 @@ static int nr_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
                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;
 
@@ -1224,11 +1224,11 @@ static int nr_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
        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);
 
@@ -1450,8 +1450,7 @@ static int __init nr_proto_init(void)
 
 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>");