mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
net: Convert proto callbacks from sockaddr to sockaddr_unsized
Convert struct proto pre_connect(), connect(), bind(), and bind_add() callback function prototypes from struct sockaddr to struct sockaddr_unsized. This does not change per-implementation use of sockaddr for passing around an arbitrarily sized sockaddr struct. Those will be addressed in future patches. Additionally removes the no longer referenced struct sockaddr from include/net/inet_common.h. No binary changes expected. Signed-off-by: Kees Cook <kees@kernel.org> Link: https://patch.msgid.link/20251104002617.2752303-5-kees@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
3d39d34146
commit
449f68f8ff
+2
-2
@@ -1126,7 +1126,7 @@ static void writequeue_entry_complete(struct writequeue_entry *e, int completed)
|
||||
static int sctp_bind_addrs(struct socket *sock, __be16 port)
|
||||
{
|
||||
struct sockaddr_storage localaddr;
|
||||
struct sockaddr *addr = (struct sockaddr *)&localaddr;
|
||||
struct sockaddr_unsized *addr = (struct sockaddr_unsized *)&localaddr;
|
||||
int i, addr_len, result = 0;
|
||||
|
||||
for (i = 0; i < dlm_local_count; i++) {
|
||||
@@ -1134,7 +1134,7 @@ static int sctp_bind_addrs(struct socket *sock, __be16 port)
|
||||
make_sockaddr(&localaddr, port, &addr_len);
|
||||
|
||||
if (!i)
|
||||
result = kernel_bind(sock, (struct sockaddr_unsized *)addr, addr_len);
|
||||
result = kernel_bind(sock, addr, addr_len);
|
||||
else
|
||||
result = sock_bind_add(sock->sk, addr, addr_len);
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ struct msghdr;
|
||||
struct net;
|
||||
struct page;
|
||||
struct sock;
|
||||
struct sockaddr;
|
||||
struct socket;
|
||||
|
||||
int inet_release(struct socket *sock);
|
||||
@@ -43,7 +42,7 @@ int inet_listen(struct socket *sock, int backlog);
|
||||
int __inet_listen_sk(struct sock *sk, int backlog);
|
||||
void inet_sock_destruct(struct sock *sk);
|
||||
int inet_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len);
|
||||
int inet_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len);
|
||||
int inet_bind_sk(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len);
|
||||
/* Don't allocate port at this moment, defer to connect. */
|
||||
#define BIND_FORCE_ADDRESS_NO_PORT (1 << 0)
|
||||
/* Grab and release socket lock. */
|
||||
@@ -52,7 +51,7 @@ int inet_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len);
|
||||
#define BIND_FROM_BPF (1 << 2)
|
||||
/* Skip CAP_NET_BIND_SERVICE check. */
|
||||
#define BIND_NO_CAP_NET_BIND_SERVICE (1 << 3)
|
||||
int __inet_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len,
|
||||
int __inet_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len,
|
||||
u32 flags);
|
||||
int inet_getname(struct socket *sock, struct sockaddr *uaddr,
|
||||
int peer);
|
||||
|
||||
+2
-2
@@ -261,8 +261,8 @@ static inline u8 ip_sendmsg_scope(const struct inet_sock *inet,
|
||||
}
|
||||
|
||||
/* datagram.c */
|
||||
int __ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len);
|
||||
int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len);
|
||||
int __ip4_datagram_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len);
|
||||
int ip4_datagram_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len);
|
||||
|
||||
void ip4_datagram_release_cb(struct sock *sk);
|
||||
|
||||
|
||||
+4
-4
@@ -1188,10 +1188,10 @@ int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
|
||||
int ipv6_getsockopt(struct sock *sk, int level, int optname,
|
||||
char __user *optval, int __user *optlen);
|
||||
|
||||
int __ip6_datagram_connect(struct sock *sk, struct sockaddr *addr,
|
||||
int __ip6_datagram_connect(struct sock *sk, struct sockaddr_unsized *addr,
|
||||
int addr_len);
|
||||
int ip6_datagram_connect(struct sock *sk, struct sockaddr *addr, int addr_len);
|
||||
int ip6_datagram_connect_v6_only(struct sock *sk, struct sockaddr *addr,
|
||||
int ip6_datagram_connect(struct sock *sk, struct sockaddr_unsized *addr, int addr_len);
|
||||
int ip6_datagram_connect_v6_only(struct sock *sk, struct sockaddr_unsized *addr,
|
||||
int addr_len);
|
||||
int ip6_datagram_dst_update(struct sock *sk, bool fix_sk_saddr);
|
||||
void ip6_datagram_release_cb(struct sock *sk);
|
||||
@@ -1209,7 +1209,7 @@ void inet6_cleanup_sock(struct sock *sk);
|
||||
void inet6_sock_destruct(struct sock *sk);
|
||||
int inet6_release(struct socket *sock);
|
||||
int inet6_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len);
|
||||
int inet6_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len);
|
||||
int inet6_bind_sk(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len);
|
||||
int inet6_getname(struct socket *sock, struct sockaddr *uaddr,
|
||||
int peer);
|
||||
int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
|
||||
|
||||
@@ -80,7 +80,7 @@ extern const struct ipv6_stub *ipv6_stub __read_mostly;
|
||||
|
||||
/* A stub used by bpf helpers. Similarly ugly as ipv6_stub */
|
||||
struct ipv6_bpf_stub {
|
||||
int (*inet6_bind)(struct sock *sk, struct sockaddr *uaddr, int addr_len,
|
||||
int (*inet6_bind)(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len,
|
||||
u32 flags);
|
||||
struct sock *(*udp6_lib_lookup)(const struct net *net,
|
||||
const struct in6_addr *saddr, __be16 sport,
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@ void ping_unhash(struct sock *sk);
|
||||
|
||||
int ping_init_sock(struct sock *sk);
|
||||
void ping_close(struct sock *sk, long timeout);
|
||||
int ping_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len);
|
||||
int ping_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len);
|
||||
void ping_err(struct sk_buff *skb, int offset, u32 info);
|
||||
int ping_getfrag(void *from, char *to, int offset, int fraglen, int odd,
|
||||
struct sk_buff *);
|
||||
|
||||
+5
-5
@@ -1274,10 +1274,10 @@ struct proto {
|
||||
void (*close)(struct sock *sk,
|
||||
long timeout);
|
||||
int (*pre_connect)(struct sock *sk,
|
||||
struct sockaddr *uaddr,
|
||||
struct sockaddr_unsized *uaddr,
|
||||
int addr_len);
|
||||
int (*connect)(struct sock *sk,
|
||||
struct sockaddr *uaddr,
|
||||
struct sockaddr_unsized *uaddr,
|
||||
int addr_len);
|
||||
int (*disconnect)(struct sock *sk, int flags);
|
||||
|
||||
@@ -1306,9 +1306,9 @@ struct proto {
|
||||
size_t len, int flags, int *addr_len);
|
||||
void (*splice_eof)(struct socket *sock);
|
||||
int (*bind)(struct sock *sk,
|
||||
struct sockaddr *addr, int addr_len);
|
||||
struct sockaddr_unsized *addr, int addr_len);
|
||||
int (*bind_add)(struct sock *sk,
|
||||
struct sockaddr *addr, int addr_len);
|
||||
struct sockaddr_unsized *addr, int addr_len);
|
||||
|
||||
int (*backlog_rcv) (struct sock *sk,
|
||||
struct sk_buff *skb);
|
||||
@@ -3105,7 +3105,7 @@ void sock_set_reuseaddr(struct sock *sk);
|
||||
void sock_set_reuseport(struct sock *sk);
|
||||
void sock_set_sndtimeo(struct sock *sk, s64 secs);
|
||||
|
||||
int sock_bind_add(struct sock *sk, struct sockaddr *addr, int addr_len);
|
||||
int sock_bind_add(struct sock *sk, struct sockaddr_unsized *addr, int addr_len);
|
||||
|
||||
int sock_get_timeout(long timeo, void *optval, bool old_timeval);
|
||||
int sock_copy_user_timeval(struct __kernel_sock_timeval *tv,
|
||||
|
||||
+1
-1
@@ -535,7 +535,7 @@ struct sock *tcp_v4_syn_recv_sock(const struct sock *sk, struct sk_buff *skb,
|
||||
struct request_sock *req_unhash,
|
||||
bool *own_req);
|
||||
int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb);
|
||||
int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len);
|
||||
int tcp_v4_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len);
|
||||
int tcp_connect(struct sock *sk);
|
||||
enum tcp_synack_type {
|
||||
TCP_SYNACK_NORMAL,
|
||||
|
||||
+1
-1
@@ -424,7 +424,7 @@ void udp4_hwcsum(struct sk_buff *skb, __be32 src, __be32 dst);
|
||||
int udp_rcv(struct sk_buff *skb);
|
||||
int udp_ioctl(struct sock *sk, int cmd, int *karg);
|
||||
int udp_init_sock(struct sock *sk);
|
||||
int udp_pre_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len);
|
||||
int udp_pre_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len);
|
||||
int __udp_disconnect(struct sock *sk, int flags);
|
||||
int udp_disconnect(struct sock *sk, int flags);
|
||||
__poll_t udp_poll(struct file *file, struct socket *sock, poll_table *wait);
|
||||
|
||||
+3
-2
@@ -5978,7 +5978,7 @@ BPF_CALL_3(bpf_bind, struct bpf_sock_addr_kern *, ctx, struct sockaddr *, addr,
|
||||
return err;
|
||||
if (((struct sockaddr_in *)addr)->sin_port == htons(0))
|
||||
flags |= BIND_FORCE_ADDRESS_NO_PORT;
|
||||
return __inet_bind(sk, addr, addr_len, flags);
|
||||
return __inet_bind(sk, (struct sockaddr_unsized *)addr, addr_len, flags);
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
} else if (addr->sa_family == AF_INET6) {
|
||||
if (addr_len < SIN6_LEN_RFC2133)
|
||||
@@ -5988,7 +5988,8 @@ BPF_CALL_3(bpf_bind, struct bpf_sock_addr_kern *, ctx, struct sockaddr *, addr,
|
||||
/* ipv6_bpf_stub cannot be NULL, since it's called from
|
||||
* bpf_cgroup_inet6_connect hook and ipv6 is already loaded
|
||||
*/
|
||||
return ipv6_bpf_stub->inet6_bind(sk, addr, addr_len, flags);
|
||||
return ipv6_bpf_stub->inet6_bind(sk, (struct sockaddr_unsized *)addr,
|
||||
addr_len, flags);
|
||||
#endif /* CONFIG_IPV6 */
|
||||
}
|
||||
#endif /* CONFIG_INET */
|
||||
|
||||
+1
-1
@@ -4395,7 +4395,7 @@ bool sk_busy_loop_end(void *p, unsigned long start_time)
|
||||
EXPORT_SYMBOL(sk_busy_loop_end);
|
||||
#endif /* CONFIG_NET_RX_BUSY_POLL */
|
||||
|
||||
int sock_bind_add(struct sock *sk, struct sockaddr *addr, int addr_len)
|
||||
int sock_bind_add(struct sock *sk, struct sockaddr_unsized *addr, int addr_len)
|
||||
{
|
||||
if (!sk->sk_prot->bind_add)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
@@ -102,7 +102,7 @@ static int ieee802154_sock_bind(struct socket *sock, struct sockaddr_unsized *ua
|
||||
struct sock *sk = sock->sk;
|
||||
|
||||
if (sk->sk_prot->bind)
|
||||
return sk->sk_prot->bind(sk, (struct sockaddr *)uaddr, addr_len);
|
||||
return sk->sk_prot->bind(sk, uaddr, addr_len);
|
||||
|
||||
return sock_no_bind(sock, uaddr, addr_len);
|
||||
}
|
||||
@@ -118,7 +118,7 @@ static int ieee802154_sock_connect(struct socket *sock, struct sockaddr_unsized
|
||||
if (uaddr->sa_family == AF_UNSPEC)
|
||||
return sk->sk_prot->disconnect(sk, flags);
|
||||
|
||||
return sk->sk_prot->connect(sk, (struct sockaddr *)uaddr, addr_len);
|
||||
return sk->sk_prot->connect(sk, uaddr, addr_len);
|
||||
}
|
||||
|
||||
static int ieee802154_dev_ioctl(struct sock *sk, struct ifreq __user *arg,
|
||||
@@ -193,7 +193,7 @@ static void raw_close(struct sock *sk, long timeout)
|
||||
sk_common_release(sk);
|
||||
}
|
||||
|
||||
static int raw_bind(struct sock *sk, struct sockaddr *_uaddr, int len)
|
||||
static int raw_bind(struct sock *sk, struct sockaddr_unsized *_uaddr, int len)
|
||||
{
|
||||
struct ieee802154_addr addr;
|
||||
struct sockaddr_ieee802154 *uaddr = (struct sockaddr_ieee802154 *)_uaddr;
|
||||
@@ -227,7 +227,7 @@ out:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int raw_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||
static int raw_connect(struct sock *sk, struct sockaddr_unsized *uaddr,
|
||||
int addr_len)
|
||||
{
|
||||
return -ENOTSUPP;
|
||||
@@ -485,7 +485,7 @@ static void dgram_close(struct sock *sk, long timeout)
|
||||
sk_common_release(sk);
|
||||
}
|
||||
|
||||
static int dgram_bind(struct sock *sk, struct sockaddr *uaddr, int len)
|
||||
static int dgram_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int len)
|
||||
{
|
||||
struct sockaddr_ieee802154 *addr = (struct sockaddr_ieee802154 *)uaddr;
|
||||
struct ieee802154_addr haddr;
|
||||
@@ -563,7 +563,7 @@ static int dgram_ioctl(struct sock *sk, int cmd, int *karg)
|
||||
}
|
||||
|
||||
/* FIXME: autobind */
|
||||
static int dgram_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||
static int dgram_connect(struct sock *sk, struct sockaddr_unsized *uaddr,
|
||||
int len)
|
||||
{
|
||||
struct sockaddr_ieee802154 *addr = (struct sockaddr_ieee802154 *)uaddr;
|
||||
|
||||
+7
-7
@@ -441,7 +441,7 @@ int inet_release(struct socket *sock)
|
||||
}
|
||||
EXPORT_SYMBOL(inet_release);
|
||||
|
||||
int inet_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
int inet_bind_sk(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len)
|
||||
{
|
||||
u32 flags = BIND_WITH_LOCK;
|
||||
int err;
|
||||
@@ -466,11 +466,11 @@ int inet_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
|
||||
int inet_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len)
|
||||
{
|
||||
return inet_bind_sk(sock->sk, (struct sockaddr *)uaddr, addr_len);
|
||||
return inet_bind_sk(sock->sk, uaddr, addr_len);
|
||||
}
|
||||
EXPORT_SYMBOL(inet_bind);
|
||||
|
||||
int __inet_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len,
|
||||
int __inet_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len,
|
||||
u32 flags)
|
||||
{
|
||||
struct sockaddr_in *addr = (struct sockaddr_in *)uaddr;
|
||||
@@ -584,14 +584,14 @@ int inet_dgram_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
|
||||
return prot->disconnect(sk, flags);
|
||||
|
||||
if (BPF_CGROUP_PRE_CONNECT_ENABLED(sk)) {
|
||||
err = prot->pre_connect(sk, (struct sockaddr *)uaddr, addr_len);
|
||||
err = prot->pre_connect(sk, uaddr, addr_len);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
if (data_race(!inet_sk(sk)->inet_num) && inet_autobind(sk))
|
||||
return -EAGAIN;
|
||||
return prot->connect(sk, (struct sockaddr *)uaddr, addr_len);
|
||||
return prot->connect(sk, uaddr, addr_len);
|
||||
}
|
||||
EXPORT_SYMBOL(inet_dgram_connect);
|
||||
|
||||
@@ -671,12 +671,12 @@ int __inet_stream_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
|
||||
goto out;
|
||||
|
||||
if (BPF_CGROUP_PRE_CONNECT_ENABLED(sk)) {
|
||||
err = sk->sk_prot->pre_connect(sk, (struct sockaddr *)uaddr, addr_len);
|
||||
err = sk->sk_prot->pre_connect(sk, uaddr, addr_len);
|
||||
if (err)
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = sk->sk_prot->connect(sk, (struct sockaddr *)uaddr, addr_len);
|
||||
err = sk->sk_prot->connect(sk, uaddr, addr_len);
|
||||
if (err < 0)
|
||||
goto out;
|
||||
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@
|
||||
#include <net/tcp_states.h>
|
||||
#include <net/sock_reuseport.h>
|
||||
|
||||
int __ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
int __ip4_datagram_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len)
|
||||
{
|
||||
struct inet_sock *inet = inet_sk(sk);
|
||||
struct sockaddr_in *usin = (struct sockaddr_in *) uaddr;
|
||||
@@ -84,7 +84,7 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL(__ip4_datagram_connect);
|
||||
|
||||
int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
int ip4_datagram_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len)
|
||||
{
|
||||
int res;
|
||||
|
||||
|
||||
+4
-4
@@ -286,7 +286,7 @@ void ping_close(struct sock *sk, long timeout)
|
||||
}
|
||||
EXPORT_IPV6_MOD_GPL(ping_close);
|
||||
|
||||
static int ping_pre_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||
static int ping_pre_connect(struct sock *sk, struct sockaddr_unsized *uaddr,
|
||||
int addr_len)
|
||||
{
|
||||
/* This check is replicated from __ip4_datagram_connect() and
|
||||
@@ -301,7 +301,7 @@ static int ping_pre_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||
|
||||
/* Checks the bind address and possibly modifies sk->sk_bound_dev_if. */
|
||||
static int ping_check_bind_addr(struct sock *sk, struct inet_sock *isk,
|
||||
struct sockaddr *uaddr, int addr_len)
|
||||
struct sockaddr_unsized *uaddr, int addr_len)
|
||||
{
|
||||
struct net *net = sock_net(sk);
|
||||
if (sk->sk_family == AF_INET) {
|
||||
@@ -387,7 +387,7 @@ static int ping_check_bind_addr(struct sock *sk, struct inet_sock *isk,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ping_set_saddr(struct sock *sk, struct sockaddr *saddr)
|
||||
static void ping_set_saddr(struct sock *sk, struct sockaddr_unsized *saddr)
|
||||
{
|
||||
if (saddr->sa_family == AF_INET) {
|
||||
struct inet_sock *isk = inet_sk(sk);
|
||||
@@ -407,7 +407,7 @@ static void ping_set_saddr(struct sock *sk, struct sockaddr *saddr)
|
||||
* Moreover, we don't allow binding to multi- and broadcast addresses.
|
||||
*/
|
||||
|
||||
int ping_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
int ping_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len)
|
||||
{
|
||||
struct inet_sock *isk = inet_sk(sk);
|
||||
unsigned short snum;
|
||||
|
||||
+2
-1
@@ -697,7 +697,8 @@ static void raw_destroy(struct sock *sk)
|
||||
}
|
||||
|
||||
/* This gets rid of all the nasties in af_inet. -DaveM */
|
||||
static int raw_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
static int raw_bind(struct sock *sk, struct sockaddr_unsized *uaddr,
|
||||
int addr_len)
|
||||
{
|
||||
struct inet_sock *inet = inet_sk(sk);
|
||||
struct sockaddr_in *addr = (struct sockaddr_in *) uaddr;
|
||||
|
||||
+2
-2
@@ -205,7 +205,7 @@ int tcp_twsk_unique(struct sock *sk, struct sock *sktw, void *twp)
|
||||
}
|
||||
EXPORT_IPV6_MOD_GPL(tcp_twsk_unique);
|
||||
|
||||
static int tcp_v4_pre_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||
static int tcp_v4_pre_connect(struct sock *sk, struct sockaddr_unsized *uaddr,
|
||||
int addr_len)
|
||||
{
|
||||
/* This check is replicated from tcp_v4_connect() and intended to
|
||||
@@ -221,7 +221,7 @@ static int tcp_v4_pre_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||
}
|
||||
|
||||
/* This will initiate an outgoing connection. */
|
||||
int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
int tcp_v4_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len)
|
||||
{
|
||||
struct sockaddr_in *usin = (struct sockaddr_in *)uaddr;
|
||||
struct inet_timewait_death_row *tcp_death_row;
|
||||
|
||||
+4
-2
@@ -2159,7 +2159,8 @@ csum_copy_err:
|
||||
goto try_again;
|
||||
}
|
||||
|
||||
int udp_pre_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
int udp_pre_connect(struct sock *sk, struct sockaddr_unsized *uaddr,
|
||||
int addr_len)
|
||||
{
|
||||
/* This check is replicated from __ip4_datagram_connect() and
|
||||
* intended to prevent BPF program called below from accessing bytes
|
||||
@@ -2172,7 +2173,8 @@ int udp_pre_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
}
|
||||
EXPORT_IPV6_MOD(udp_pre_connect);
|
||||
|
||||
static int udp_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
static int udp_connect(struct sock *sk, struct sockaddr_unsized *uaddr,
|
||||
int addr_len)
|
||||
{
|
||||
int res;
|
||||
|
||||
|
||||
+3
-3
@@ -277,7 +277,7 @@ out_sk_release:
|
||||
goto out;
|
||||
}
|
||||
|
||||
static int __inet6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len,
|
||||
static int __inet6_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len,
|
||||
u32 flags)
|
||||
{
|
||||
struct sockaddr_in6 *addr = (struct sockaddr_in6 *)uaddr;
|
||||
@@ -438,7 +438,7 @@ out_unlock:
|
||||
goto out;
|
||||
}
|
||||
|
||||
int inet6_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
int inet6_bind_sk(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len)
|
||||
{
|
||||
u32 flags = BIND_WITH_LOCK;
|
||||
const struct proto *prot;
|
||||
@@ -467,7 +467,7 @@ int inet6_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
/* bind for INET6 API */
|
||||
int inet6_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len)
|
||||
{
|
||||
return inet6_bind_sk(sock->sk, (struct sockaddr *)uaddr, addr_len);
|
||||
return inet6_bind_sk(sock->sk, uaddr, addr_len);
|
||||
}
|
||||
EXPORT_SYMBOL(inet6_bind);
|
||||
|
||||
|
||||
+4
-4
@@ -138,7 +138,7 @@ void ip6_datagram_release_cb(struct sock *sk)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ip6_datagram_release_cb);
|
||||
|
||||
int __ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||
int __ip6_datagram_connect(struct sock *sk, struct sockaddr_unsized *uaddr,
|
||||
int addr_len)
|
||||
{
|
||||
struct sockaddr_in6 *usin = (struct sockaddr_in6 *) uaddr;
|
||||
@@ -194,7 +194,7 @@ int __ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr,
|
||||
sin.sin_port = usin->sin6_port;
|
||||
|
||||
err = __ip4_datagram_connect(sk,
|
||||
(struct sockaddr *) &sin,
|
||||
(struct sockaddr_unsized *)&sin,
|
||||
sizeof(sin));
|
||||
|
||||
ipv4_connected:
|
||||
@@ -271,7 +271,7 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__ip6_datagram_connect);
|
||||
|
||||
int ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
int ip6_datagram_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len)
|
||||
{
|
||||
int res;
|
||||
|
||||
@@ -282,7 +282,7 @@ int ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ip6_datagram_connect);
|
||||
|
||||
int ip6_datagram_connect_v6_only(struct sock *sk, struct sockaddr *uaddr,
|
||||
int ip6_datagram_connect_v6_only(struct sock *sk, struct sockaddr_unsized *uaddr,
|
||||
int addr_len)
|
||||
{
|
||||
DECLARE_SOCKADDR(struct sockaddr_in6 *, sin6, uaddr);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user