X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fnetrom%2Faf_netrom.c;h=6774669bb212c924748b41ea417caae26abfff3b;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=bb5ac58a66cf961658b2bcbf2fb2d4c770982209;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index bb5ac58a6..6774669bb 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c @@ -10,6 +10,7 @@ */ #include #include +#include #include #include #include @@ -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); @@ -1021,7 +1022,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 +1177,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 +1188,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 +1198,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 +1226,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 +1452,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 ");