mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 17:57:38 -04:00
net: pass a sockptr_t into ->setsockopt
Rework the remaining setsockopt code to pass a sockptr_t instead of a plain user pointer. This removes the last remaining set_fs(KERNEL_DS) outside of architecture specific code. Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Stefan Schmidt <stefan@datenfreihafen.org> [ieee802154] Acked-by: Matthieu Baerts <matthieu.baerts@tessares.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
d38d2b00ba
commit
a7b75c5a8c
@@ -21,6 +21,7 @@
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/once.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/sockptr.h>
|
||||
|
||||
#include <uapi/linux/net.h>
|
||||
|
||||
@@ -162,7 +163,8 @@ struct proto_ops {
|
||||
int (*listen) (struct socket *sock, int len);
|
||||
int (*shutdown) (struct socket *sock, int flags);
|
||||
int (*setsockopt)(struct socket *sock, int level,
|
||||
int optname, char __user *optval, unsigned int optlen);
|
||||
int optname, sockptr_t optval,
|
||||
unsigned int optlen);
|
||||
int (*getsockopt)(struct socket *sock, int level,
|
||||
int optname, char __user *optval, int __user *optlen);
|
||||
void (*show_fdinfo)(struct seq_file *m, struct socket *sock);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include <linux/timer.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sockptr.h>
|
||||
|
||||
#include <net/inet_sock.h>
|
||||
#include <net/request_sock.h>
|
||||
@@ -45,7 +46,7 @@ struct inet_connection_sock_af_ops {
|
||||
u16 net_frag_header_len;
|
||||
u16 sockaddr_len;
|
||||
int (*setsockopt)(struct sock *sk, int level, int optname,
|
||||
char __user *optval, unsigned int optlen);
|
||||
sockptr_t optval, unsigned int optlen);
|
||||
int (*getsockopt)(struct sock *sk, int level, int optname,
|
||||
char __user *optval, int __user *optlen);
|
||||
void (*addr2sockaddr)(struct sock *sk, struct sockaddr *);
|
||||
|
||||
@@ -722,7 +722,7 @@ void ip_cmsg_recv_offset(struct msghdr *msg, struct sock *sk,
|
||||
struct sk_buff *skb, int tlen, int offset);
|
||||
int ip_cmsg_send(struct sock *sk, struct msghdr *msg,
|
||||
struct ipcm_cookie *ipc, bool allow_ipv6);
|
||||
int ip_setsockopt(struct sock *sk, int level, int optname, char __user *optval,
|
||||
int ip_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
|
||||
unsigned int optlen);
|
||||
int ip_getsockopt(struct sock *sk, int level, int optname, char __user *optval,
|
||||
int __user *optlen);
|
||||
|
||||
@@ -1084,8 +1084,8 @@ struct in6_addr *fl6_update_dst(struct flowi6 *fl6,
|
||||
* socket options (ipv6_sockglue.c)
|
||||
*/
|
||||
|
||||
int ipv6_setsockopt(struct sock *sk, int level, int optname,
|
||||
char __user *optval, unsigned int optlen);
|
||||
int ipv6_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
|
||||
unsigned int optlen);
|
||||
int ipv6_getsockopt(struct sock *sk, int level, int optname,
|
||||
char __user *optval, int __user *optlen);
|
||||
|
||||
|
||||
@@ -431,7 +431,7 @@ struct sctp_af {
|
||||
int (*setsockopt) (struct sock *sk,
|
||||
int level,
|
||||
int optname,
|
||||
char __user *optval,
|
||||
sockptr_t optval,
|
||||
unsigned int optlen);
|
||||
int (*getsockopt) (struct sock *sk,
|
||||
int level,
|
||||
|
||||
@@ -1141,7 +1141,7 @@ struct proto {
|
||||
void (*destroy)(struct sock *sk);
|
||||
void (*shutdown)(struct sock *sk, int how);
|
||||
int (*setsockopt)(struct sock *sk, int level,
|
||||
int optname, char __user *optval,
|
||||
int optname, sockptr_t optval,
|
||||
unsigned int optlen);
|
||||
int (*getsockopt)(struct sock *sk, int level,
|
||||
int optname, char __user *optval,
|
||||
@@ -1734,7 +1734,7 @@ int sock_common_getsockopt(struct socket *sock, int level, int optname,
|
||||
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);
|
||||
sockptr_t optval, unsigned int optlen);
|
||||
|
||||
void sk_common_release(struct sock *sk);
|
||||
|
||||
|
||||
@@ -399,8 +399,8 @@ __poll_t tcp_poll(struct file *file, struct socket *sock,
|
||||
struct poll_table_struct *wait);
|
||||
int tcp_getsockopt(struct sock *sk, int level, int optname,
|
||||
char __user *optval, int __user *optlen);
|
||||
int tcp_setsockopt(struct sock *sk, int level, int optname,
|
||||
char __user *optval, unsigned int optlen);
|
||||
int tcp_setsockopt(struct sock *sk, int level, int optname, sockptr_t optval,
|
||||
unsigned int optlen);
|
||||
void tcp_set_keepalive(struct sock *sk, int val);
|
||||
void tcp_syn_ack_timeout(const struct request_sock *req);
|
||||
int tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int nonblock,
|
||||
|
||||
Reference in New Issue
Block a user