* using sock_common_getsockopt() Signed-off-by: Aristeu Sergio Rozanski Filho Index: net/x25/x25_proto.c =================================================================== --- net/x25/x25_proto.c (revision 34) +++ net/x25/x25_proto.c (revision 35) @@ -18,6 +18,7 @@ #include #include #include +#include static int x25_proto_setsockopt(struct sock *sk, int level, int optname, char __user *optval, int optlen) @@ -41,9 +42,39 @@ out: return rc; } + +static int x25_proto_getsockopt(struct sock *sk, int level, int optname, + char __user *optval, int __user *optlen) +{ + int val, len, rc = -ENOPROTOOPT; + + if (level != SOL_X25 || optname != X25_QBITINCL) + goto out; + + rc = -EFAULT; + if (get_user(len, optlen)) + goto out; + + len = min_t(unsigned int, len, sizeof(int)); + + rc = -EINVAL; + if (len < 0) + goto out; + + rc = -EFAULT; + if (put_user(len, optlen)) + goto out; + + val = x25_sk(sk)->qbitincl; + rc = copy_to_user(optval, &val, len) ? -EFAULT : 0; +out: + return rc; +} + struct proto x25_prot = { .name = "X25", .setsockopt = x25_proto_setsockopt, + .getsockopt = x25_proto_getsockopt, }; EXPORT_SYMBOL(x25_prot); Index: net/x25/af_x25.c =================================================================== --- net/x25/af_x25.c (revision 34) +++ net/x25/af_x25.c (revision 35) @@ -364,35 +364,6 @@ * X.25 socket object. */ -static int x25_getsockopt(struct socket *sock, int level, int optname, - char __user *optval, int __user *optlen) -{ - struct sock *sk = sock->sk; - int val, len, rc = -ENOPROTOOPT; - - if (level != SOL_X25 || optname != X25_QBITINCL) - goto out; - - rc = -EFAULT; - if (get_user(len, optlen)) - goto out; - - len = min_t(unsigned int, len, sizeof(int)); - - rc = -EINVAL; - if (len < 0) - goto out; - - rc = -EFAULT; - if (put_user(len, optlen)) - goto out; - - val = x25_sk(sk)->qbitincl; - rc = copy_to_user(optval, &val, len) ? -EFAULT : 0; -out: - return rc; -} - static int x25_listen(struct socket *sock, int backlog) { struct sock *sk = sock->sk; @@ -1314,7 +1285,7 @@ .listen = x25_listen, .shutdown = sock_no_shutdown, .setsockopt = sock_common_setsockopt, - .getsockopt = x25_getsockopt, + .getsockopt = sock_common_getsockopt, .sendmsg = x25_sendmsg, .recvmsg = x25_recvmsg, .mmap = sock_no_mmap,