Re: [PATCH 05/22] net: remove compat_sock_common_{get,set}sockopt

Stefan Schmidt <[email protected]>
Newsgroups org.kernel.vger.dccp,dev.linux.lists.bridge,dev.linux.lists.mptcp,org.kernel.vger.bpf,org.kernel.vger.linux-arch,org.kernel.vger.linux-bluetooth,org.kernel.vger.linux-can,org.kernel.vger.linux-kernel,org.kernel.vger.linux-sctp,org.kernel.vger.linux-wpan,org.kernel.vger.netdev,org.kernel.vger.netfilter-devel
Message-ID <[email protected]>
Hello.

On 17.07.20 08:23, Christoph Hellwig wrote:
> Add the compat handling to sock_common_{get,set}sockopt instead,
> keyed of in_compat_syscall().  This allow to remove the now unused
> ->compat_{get,set}sockopt methods from struct proto_ops.
> 
> Signed-off-by: Christoph Hellwig <[email protected]>
> ---
>   include/linux/net.h      |  6 ------
>   include/net/sock.h       |  4 ----
>   net/core/sock.c          | 30 ++++++------------------------
>   net/dccp/ipv4.c          |  4 ----
>   net/dccp/ipv6.c          |  2 --
>   net/ieee802154/socket.c  |  8 --------
>   net/ipv4/af_inet.c       |  6 ------
>   net/ipv6/af_inet6.c      |  4 ----
>   net/ipv6/ipv6_sockglue.c | 12 ++----------
>   net/ipv6/raw.c           |  2 --
>   net/l2tp/l2tp_ip.c       |  4 ----
>   net/l2tp/l2tp_ip6.c      |  2 --
>   net/mptcp/protocol.c     |  6 ------
>   net/phonet/socket.c      |  8 --------
>   net/sctp/ipv6.c          |  2 --
>   net/sctp/protocol.c      |  4 ----
>   16 files changed, 8 insertions(+), 96 deletions(-)
> 
> diff --git a/include/linux/net.h b/include/linux/net.h
> index 016a9c5faa3479..858ff1d981540d 100644
> --- a/include/linux/net.h
> +++ b/include/linux/net.h
> @@ -165,12 +165,6 @@ struct proto_ops {
>   				      int optname, char __user *optval, unsigned int optlen);
>   	int		(*getsockopt)(struct socket *sock, int level,
>   				      int optname, char __user *optval, int __user *optlen);
> -#ifdef CONFIG_COMPAT
> -	int		(*compat_setsockopt)(struct socket *sock, int level,
> -				      int optname, char __user *optval, unsigned int optlen);
> -	int		(*compat_getsockopt)(struct socket *sock, int level,
> -				      int optname, char __user *optval, int __user *optlen);
> -#endif
>   	void		(*show_fdinfo)(struct seq_file *m, struct socket *sock);
>   	int		(*sendmsg)   (struct socket *sock, struct msghdr *m,
>   				      size_t total_len);
> diff --git a/include/net/sock.h b/include/net/sock.h
> index 4bf8841651486d..1fd7cf5fc7516c 100644
> --- a/include/net/sock.h
> +++ b/include/net/sock.h
> @@ -1744,10 +1744,6 @@ int sock_common_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   			int flags);
>   int sock_common_setsockopt(struct socket *sock, int level, int optname,
>   				  char __user *optval, unsigned int optlen);
> -int compat_sock_common_getsockopt(struct socket *sock, int level,
> -		int optname, char __user *optval, int __user *optlen);
> -int compat_sock_common_setsockopt(struct socket *sock, int level,
> -		int optname, char __user *optval, unsigned int optlen);
>   
>   void sk_common_release(struct sock *sk);
>   
> diff --git a/net/core/sock.c b/net/core/sock.c
> index e085df79482520..018404d1762682 100644
> --- a/net/core/sock.c
> +++ b/net/core/sock.c
> @@ -3199,23 +3199,14 @@ int sock_common_getsockopt(struct socket *sock, int level, int optname,
>   {
>   	struct sock *sk = sock->sk;
>   
> -	return sk->sk_prot->getsockopt(sk, level, optname, optval, optlen);
> -}
> -EXPORT_SYMBOL(sock_common_getsockopt);
> -
>   #ifdef CONFIG_COMPAT
> -int compat_sock_common_getsockopt(struct socket *sock, int level, int optname,
> -				  char __user *optval, int __user *optlen)
> -{
> -	struct sock *sk = sock->sk;
> -
> -	if (sk->sk_prot->compat_getsockopt != NULL)
> +	if (in_compat_syscal() && sk->sk_prot->compat_getsockopt)
>   		return sk->sk_prot->compat_getsockopt(sk, level, optname,
>   						      optval, optlen);
> +#endif
>   	return sk->sk_prot->getsockopt(sk, level, optname, optval, optlen);
>   }
> -EXPORT_SYMBOL(compat_sock_common_getsockopt);
> -#endif
> +EXPORT_SYMBOL(sock_common_getsockopt);
>   
>   int sock_common_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
>   			int flags)
> @@ -3240,23 +3231,14 @@ int sock_common_setsockopt(struct socket *sock, int level, int optname,
>   {
>   	struct sock *sk = sock->sk;
>   
> -	return sk->sk_prot->setsockopt(sk, level, optname, optval, optlen);
> -}
> -EXPORT_SYMBOL(sock_common_setsockopt);
> -
>   #ifdef CONFIG_COMPAT
> -int compat_sock_common_setsockopt(struct socket *sock, int level, int optname,
> -				  char __user *optval, unsigned int optlen)
> -{
> -	struct sock *sk = sock->sk;
> -
> -	if (sk->sk_prot->compat_setsockopt != NULL)
> +	if (in_compat_syscall() && sk->sk_prot->compat_setsockopt)
>   		return sk->sk_prot->compat_setsockopt(sk, level, optname,
>   						      optval, optlen);
> +#endif
>   	return sk->sk_prot->setsockopt(sk, level, optname, optval, optlen);
>   }
> -EXPORT_SYMBOL(compat_sock_common_setsockopt);
> -#endif
> +EXPORT_SYMBOL(sock_common_setsockopt);
>   
>   void sk_common_release(struct sock *sk)
>   {
> diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
> index a7e989919c5307..316cc5ac0da72b 100644
> --- a/net/dccp/ipv4.c
> +++ b/net/dccp/ipv4.c
> @@ -999,10 +999,6 @@ static const struct proto_ops inet_dccp_ops = {
>   	.recvmsg	   = sock_common_recvmsg,
>   	.mmap		   = sock_no_mmap,
>   	.sendpage	   = sock_no_sendpage,
> -#ifdef CONFIG_COMPAT
> -	.compat_setsockopt = compat_sock_common_setsockopt,
> -	.compat_getsockopt = compat_sock_common_getsockopt,
> -#endif
>   };
>   
>   static struct inet_protosw dccp_v4_protosw = {
> diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c
> index 650187d688519c..b50f85a72cd5fc 100644
> --- a/net/dccp/ipv6.c
> +++ b/net/dccp/ipv6.c
> @@ -1083,8 +1083,6 @@ static const struct proto_ops inet6_dccp_ops = {
>   	.sendpage	   = sock_no_sendpage,
>   #ifdef CONFIG_COMPAT
>   	.compat_ioctl	   = inet6_compat_ioctl,
> -	.compat_setsockopt = compat_sock_common_setsockopt,
> -	.compat_getsockopt = compat_sock_common_getsockopt,
>   #endif
>   };
>   
> diff --git a/net/ieee802154/socket.c b/net/ieee802154/socket.c
> index d93d4531aa9bc5..94ae9662133e30 100644
> --- a/net/ieee802154/socket.c
> +++ b/net/ieee802154/socket.c
> @@ -423,10 +423,6 @@ static const struct proto_ops ieee802154_raw_ops = {
>   	.recvmsg	   = sock_common_recvmsg,
>   	.mmap		   = sock_no_mmap,
>   	.sendpage	   = sock_no_sendpage,
> -#ifdef CONFIG_COMPAT
> -	.compat_setsockopt = compat_sock_common_setsockopt,
> -	.compat_getsockopt = compat_sock_common_getsockopt,
> -#endif
>   };
>   
>   /* DGRAM Sockets (802.15.4 dataframes) */
> @@ -986,10 +982,6 @@ static const struct proto_ops ieee802154_dgram_ops = {
>   	.recvmsg	   = sock_common_recvmsg,
>   	.mmap		   = sock_no_mmap,
>   	.sendpage	   = sock_no_sendpage,
> -#ifdef CONFIG_COMPAT
> -	.compat_setsockopt = compat_sock_common_setsockopt,
> -	.compat_getsockopt = compat_sock_common_getsockopt,
> -#endif

For the ieee802154 part:

Acked-by: Stefan Schmidt <[email protected]>

regards
Stefan Schmidt
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.