Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Kees Cook and committed by
Jakub Kicinski
449f68f8 3d39d341

+88 -77
+2 -2
fs/dlm/lowcomms.c
··· 1126 1126 static int sctp_bind_addrs(struct socket *sock, __be16 port) 1127 1127 { 1128 1128 struct sockaddr_storage localaddr; 1129 - struct sockaddr *addr = (struct sockaddr *)&localaddr; 1129 + struct sockaddr_unsized *addr = (struct sockaddr_unsized *)&localaddr; 1130 1130 int i, addr_len, result = 0; 1131 1131 1132 1132 for (i = 0; i < dlm_local_count; i++) { ··· 1134 1134 make_sockaddr(&localaddr, port, &addr_len); 1135 1135 1136 1136 if (!i) 1137 - result = kernel_bind(sock, (struct sockaddr_unsized *)addr, addr_len); 1137 + result = kernel_bind(sock, addr, addr_len); 1138 1138 else 1139 1139 result = sock_bind_add(sock->sk, addr, addr_len); 1140 1140
+2 -3
include/net/inet_common.h
··· 19 19 struct net; 20 20 struct page; 21 21 struct sock; 22 - struct sockaddr; 23 22 struct socket; 24 23 25 24 int inet_release(struct socket *sock); ··· 42 43 int __inet_listen_sk(struct sock *sk, int backlog); 43 44 void inet_sock_destruct(struct sock *sk); 44 45 int inet_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len); 45 - int inet_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len); 46 + int inet_bind_sk(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len); 46 47 /* Don't allocate port at this moment, defer to connect. */ 47 48 #define BIND_FORCE_ADDRESS_NO_PORT (1 << 0) 48 49 /* Grab and release socket lock. */ ··· 51 52 #define BIND_FROM_BPF (1 << 2) 52 53 /* Skip CAP_NET_BIND_SERVICE check. */ 53 54 #define BIND_NO_CAP_NET_BIND_SERVICE (1 << 3) 54 - int __inet_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len, 55 + int __inet_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len, 55 56 u32 flags); 56 57 int inet_getname(struct socket *sock, struct sockaddr *uaddr, 57 58 int peer);
+2 -2
include/net/ip.h
··· 261 261 } 262 262 263 263 /* datagram.c */ 264 - int __ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len); 265 - int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len); 264 + int __ip4_datagram_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len); 265 + int ip4_datagram_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len); 266 266 267 267 void ip4_datagram_release_cb(struct sock *sk); 268 268
+4 -4
include/net/ipv6.h
··· 1188 1188 int ipv6_getsockopt(struct sock *sk, int level, int optname, 1189 1189 char __user *optval, int __user *optlen); 1190 1190 1191 - int __ip6_datagram_connect(struct sock *sk, struct sockaddr *addr, 1191 + int __ip6_datagram_connect(struct sock *sk, struct sockaddr_unsized *addr, 1192 1192 int addr_len); 1193 - int ip6_datagram_connect(struct sock *sk, struct sockaddr *addr, int addr_len); 1194 - int ip6_datagram_connect_v6_only(struct sock *sk, struct sockaddr *addr, 1193 + int ip6_datagram_connect(struct sock *sk, struct sockaddr_unsized *addr, int addr_len); 1194 + int ip6_datagram_connect_v6_only(struct sock *sk, struct sockaddr_unsized *addr, 1195 1195 int addr_len); 1196 1196 int ip6_datagram_dst_update(struct sock *sk, bool fix_sk_saddr); 1197 1197 void ip6_datagram_release_cb(struct sock *sk); ··· 1209 1209 void inet6_sock_destruct(struct sock *sk); 1210 1210 int inet6_release(struct socket *sock); 1211 1211 int inet6_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len); 1212 - int inet6_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len); 1212 + int inet6_bind_sk(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len); 1213 1213 int inet6_getname(struct socket *sock, struct sockaddr *uaddr, 1214 1214 int peer); 1215 1215 int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
+1 -1
include/net/ipv6_stubs.h
··· 80 80 81 81 /* A stub used by bpf helpers. Similarly ugly as ipv6_stub */ 82 82 struct ipv6_bpf_stub { 83 - int (*inet6_bind)(struct sock *sk, struct sockaddr *uaddr, int addr_len, 83 + int (*inet6_bind)(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len, 84 84 u32 flags); 85 85 struct sock *(*udp6_lib_lookup)(const struct net *net, 86 86 const struct in6_addr *saddr, __be16 sport,
+1 -1
include/net/ping.h
··· 58 58 59 59 int ping_init_sock(struct sock *sk); 60 60 void ping_close(struct sock *sk, long timeout); 61 - int ping_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len); 61 + int ping_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len); 62 62 void ping_err(struct sk_buff *skb, int offset, u32 info); 63 63 int ping_getfrag(void *from, char *to, int offset, int fraglen, int odd, 64 64 struct sk_buff *);
+5 -5
include/net/sock.h
··· 1274 1274 void (*close)(struct sock *sk, 1275 1275 long timeout); 1276 1276 int (*pre_connect)(struct sock *sk, 1277 - struct sockaddr *uaddr, 1277 + struct sockaddr_unsized *uaddr, 1278 1278 int addr_len); 1279 1279 int (*connect)(struct sock *sk, 1280 - struct sockaddr *uaddr, 1280 + struct sockaddr_unsized *uaddr, 1281 1281 int addr_len); 1282 1282 int (*disconnect)(struct sock *sk, int flags); 1283 1283 ··· 1306 1306 size_t len, int flags, int *addr_len); 1307 1307 void (*splice_eof)(struct socket *sock); 1308 1308 int (*bind)(struct sock *sk, 1309 - struct sockaddr *addr, int addr_len); 1309 + struct sockaddr_unsized *addr, int addr_len); 1310 1310 int (*bind_add)(struct sock *sk, 1311 - struct sockaddr *addr, int addr_len); 1311 + struct sockaddr_unsized *addr, int addr_len); 1312 1312 1313 1313 int (*backlog_rcv) (struct sock *sk, 1314 1314 struct sk_buff *skb); ··· 3105 3105 void sock_set_reuseport(struct sock *sk); 3106 3106 void sock_set_sndtimeo(struct sock *sk, s64 secs); 3107 3107 3108 - int sock_bind_add(struct sock *sk, struct sockaddr *addr, int addr_len); 3108 + int sock_bind_add(struct sock *sk, struct sockaddr_unsized *addr, int addr_len); 3109 3109 3110 3110 int sock_get_timeout(long timeo, void *optval, bool old_timeval); 3111 3111 int sock_copy_user_timeval(struct __kernel_sock_timeval *tv,
+1 -1
include/net/tcp.h
··· 535 535 struct request_sock *req_unhash, 536 536 bool *own_req); 537 537 int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb); 538 - int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len); 538 + int tcp_v4_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len); 539 539 int tcp_connect(struct sock *sk); 540 540 enum tcp_synack_type { 541 541 TCP_SYNACK_NORMAL,
+1 -1
include/net/udp.h
··· 424 424 int udp_rcv(struct sk_buff *skb); 425 425 int udp_ioctl(struct sock *sk, int cmd, int *karg); 426 426 int udp_init_sock(struct sock *sk); 427 - int udp_pre_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len); 427 + int udp_pre_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len); 428 428 int __udp_disconnect(struct sock *sk, int flags); 429 429 int udp_disconnect(struct sock *sk, int flags); 430 430 __poll_t udp_poll(struct file *file, struct socket *sock, poll_table *wait);
+3 -2
net/core/filter.c
··· 5978 5978 return err; 5979 5979 if (((struct sockaddr_in *)addr)->sin_port == htons(0)) 5980 5980 flags |= BIND_FORCE_ADDRESS_NO_PORT; 5981 - return __inet_bind(sk, addr, addr_len, flags); 5981 + return __inet_bind(sk, (struct sockaddr_unsized *)addr, addr_len, flags); 5982 5982 #if IS_ENABLED(CONFIG_IPV6) 5983 5983 } else if (addr->sa_family == AF_INET6) { 5984 5984 if (addr_len < SIN6_LEN_RFC2133) ··· 5988 5988 /* ipv6_bpf_stub cannot be NULL, since it's called from 5989 5989 * bpf_cgroup_inet6_connect hook and ipv6 is already loaded 5990 5990 */ 5991 - return ipv6_bpf_stub->inet6_bind(sk, addr, addr_len, flags); 5991 + return ipv6_bpf_stub->inet6_bind(sk, (struct sockaddr_unsized *)addr, 5992 + addr_len, flags); 5992 5993 #endif /* CONFIG_IPV6 */ 5993 5994 } 5994 5995 #endif /* CONFIG_INET */
+1 -1
net/core/sock.c
··· 4395 4395 EXPORT_SYMBOL(sk_busy_loop_end); 4396 4396 #endif /* CONFIG_NET_RX_BUSY_POLL */ 4397 4397 4398 - int sock_bind_add(struct sock *sk, struct sockaddr *addr, int addr_len) 4398 + int sock_bind_add(struct sock *sk, struct sockaddr_unsized *addr, int addr_len) 4399 4399 { 4400 4400 if (!sk->sk_prot->bind_add) 4401 4401 return -EOPNOTSUPP;
+6 -6
net/ieee802154/socket.c
··· 102 102 struct sock *sk = sock->sk; 103 103 104 104 if (sk->sk_prot->bind) 105 - return sk->sk_prot->bind(sk, (struct sockaddr *)uaddr, addr_len); 105 + return sk->sk_prot->bind(sk, uaddr, addr_len); 106 106 107 107 return sock_no_bind(sock, uaddr, addr_len); 108 108 } ··· 118 118 if (uaddr->sa_family == AF_UNSPEC) 119 119 return sk->sk_prot->disconnect(sk, flags); 120 120 121 - return sk->sk_prot->connect(sk, (struct sockaddr *)uaddr, addr_len); 121 + return sk->sk_prot->connect(sk, uaddr, addr_len); 122 122 } 123 123 124 124 static int ieee802154_dev_ioctl(struct sock *sk, struct ifreq __user *arg, ··· 193 193 sk_common_release(sk); 194 194 } 195 195 196 - static int raw_bind(struct sock *sk, struct sockaddr *_uaddr, int len) 196 + static int raw_bind(struct sock *sk, struct sockaddr_unsized *_uaddr, int len) 197 197 { 198 198 struct ieee802154_addr addr; 199 199 struct sockaddr_ieee802154 *uaddr = (struct sockaddr_ieee802154 *)_uaddr; ··· 227 227 return err; 228 228 } 229 229 230 - static int raw_connect(struct sock *sk, struct sockaddr *uaddr, 230 + static int raw_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 231 231 int addr_len) 232 232 { 233 233 return -ENOTSUPP; ··· 485 485 sk_common_release(sk); 486 486 } 487 487 488 - static int dgram_bind(struct sock *sk, struct sockaddr *uaddr, int len) 488 + static int dgram_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int len) 489 489 { 490 490 struct sockaddr_ieee802154 *addr = (struct sockaddr_ieee802154 *)uaddr; 491 491 struct ieee802154_addr haddr; ··· 563 563 } 564 564 565 565 /* FIXME: autobind */ 566 - static int dgram_connect(struct sock *sk, struct sockaddr *uaddr, 566 + static int dgram_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 567 567 int len) 568 568 { 569 569 struct sockaddr_ieee802154 *addr = (struct sockaddr_ieee802154 *)uaddr;
+7 -7
net/ipv4/af_inet.c
··· 441 441 } 442 442 EXPORT_SYMBOL(inet_release); 443 443 444 - int inet_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len) 444 + int inet_bind_sk(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len) 445 445 { 446 446 u32 flags = BIND_WITH_LOCK; 447 447 int err; ··· 466 466 467 467 int inet_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len) 468 468 { 469 - return inet_bind_sk(sock->sk, (struct sockaddr *)uaddr, addr_len); 469 + return inet_bind_sk(sock->sk, uaddr, addr_len); 470 470 } 471 471 EXPORT_SYMBOL(inet_bind); 472 472 473 - int __inet_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len, 473 + int __inet_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len, 474 474 u32 flags) 475 475 { 476 476 struct sockaddr_in *addr = (struct sockaddr_in *)uaddr; ··· 584 584 return prot->disconnect(sk, flags); 585 585 586 586 if (BPF_CGROUP_PRE_CONNECT_ENABLED(sk)) { 587 - err = prot->pre_connect(sk, (struct sockaddr *)uaddr, addr_len); 587 + err = prot->pre_connect(sk, uaddr, addr_len); 588 588 if (err) 589 589 return err; 590 590 } 591 591 592 592 if (data_race(!inet_sk(sk)->inet_num) && inet_autobind(sk)) 593 593 return -EAGAIN; 594 - return prot->connect(sk, (struct sockaddr *)uaddr, addr_len); 594 + return prot->connect(sk, uaddr, addr_len); 595 595 } 596 596 EXPORT_SYMBOL(inet_dgram_connect); 597 597 ··· 671 671 goto out; 672 672 673 673 if (BPF_CGROUP_PRE_CONNECT_ENABLED(sk)) { 674 - err = sk->sk_prot->pre_connect(sk, (struct sockaddr *)uaddr, addr_len); 674 + err = sk->sk_prot->pre_connect(sk, uaddr, addr_len); 675 675 if (err) 676 676 goto out; 677 677 } 678 678 679 - err = sk->sk_prot->connect(sk, (struct sockaddr *)uaddr, addr_len); 679 + err = sk->sk_prot->connect(sk, uaddr, addr_len); 680 680 if (err < 0) 681 681 goto out; 682 682
+2 -2
net/ipv4/datagram.c
··· 16 16 #include <net/tcp_states.h> 17 17 #include <net/sock_reuseport.h> 18 18 19 - int __ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) 19 + int __ip4_datagram_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len) 20 20 { 21 21 struct inet_sock *inet = inet_sk(sk); 22 22 struct sockaddr_in *usin = (struct sockaddr_in *) uaddr; ··· 84 84 } 85 85 EXPORT_SYMBOL(__ip4_datagram_connect); 86 86 87 - int ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) 87 + int ip4_datagram_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len) 88 88 { 89 89 int res; 90 90
+4 -4
net/ipv4/ping.c
··· 286 286 } 287 287 EXPORT_IPV6_MOD_GPL(ping_close); 288 288 289 - static int ping_pre_connect(struct sock *sk, struct sockaddr *uaddr, 289 + static int ping_pre_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 290 290 int addr_len) 291 291 { 292 292 /* This check is replicated from __ip4_datagram_connect() and ··· 301 301 302 302 /* Checks the bind address and possibly modifies sk->sk_bound_dev_if. */ 303 303 static int ping_check_bind_addr(struct sock *sk, struct inet_sock *isk, 304 - struct sockaddr *uaddr, int addr_len) 304 + struct sockaddr_unsized *uaddr, int addr_len) 305 305 { 306 306 struct net *net = sock_net(sk); 307 307 if (sk->sk_family == AF_INET) { ··· 387 387 return 0; 388 388 } 389 389 390 - static void ping_set_saddr(struct sock *sk, struct sockaddr *saddr) 390 + static void ping_set_saddr(struct sock *sk, struct sockaddr_unsized *saddr) 391 391 { 392 392 if (saddr->sa_family == AF_INET) { 393 393 struct inet_sock *isk = inet_sk(sk); ··· 407 407 * Moreover, we don't allow binding to multi- and broadcast addresses. 408 408 */ 409 409 410 - int ping_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) 410 + int ping_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len) 411 411 { 412 412 struct inet_sock *isk = inet_sk(sk); 413 413 unsigned short snum;
+2 -1
net/ipv4/raw.c
··· 697 697 } 698 698 699 699 /* This gets rid of all the nasties in af_inet. -DaveM */ 700 - static int raw_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) 700 + static int raw_bind(struct sock *sk, struct sockaddr_unsized *uaddr, 701 + int addr_len) 701 702 { 702 703 struct inet_sock *inet = inet_sk(sk); 703 704 struct sockaddr_in *addr = (struct sockaddr_in *) uaddr;
+2 -2
net/ipv4/tcp_ipv4.c
··· 205 205 } 206 206 EXPORT_IPV6_MOD_GPL(tcp_twsk_unique); 207 207 208 - static int tcp_v4_pre_connect(struct sock *sk, struct sockaddr *uaddr, 208 + static int tcp_v4_pre_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 209 209 int addr_len) 210 210 { 211 211 /* This check is replicated from tcp_v4_connect() and intended to ··· 221 221 } 222 222 223 223 /* This will initiate an outgoing connection. */ 224 - int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) 224 + int tcp_v4_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len) 225 225 { 226 226 struct sockaddr_in *usin = (struct sockaddr_in *)uaddr; 227 227 struct inet_timewait_death_row *tcp_death_row;
+4 -2
net/ipv4/udp.c
··· 2159 2159 goto try_again; 2160 2160 } 2161 2161 2162 - int udp_pre_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) 2162 + int udp_pre_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 2163 + int addr_len) 2163 2164 { 2164 2165 /* This check is replicated from __ip4_datagram_connect() and 2165 2166 * intended to prevent BPF program called below from accessing bytes ··· 2173 2172 } 2174 2173 EXPORT_IPV6_MOD(udp_pre_connect); 2175 2174 2176 - static int udp_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) 2175 + static int udp_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 2176 + int addr_len) 2177 2177 { 2178 2178 int res; 2179 2179
+3 -3
net/ipv6/af_inet6.c
··· 277 277 goto out; 278 278 } 279 279 280 - static int __inet6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len, 280 + static int __inet6_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len, 281 281 u32 flags) 282 282 { 283 283 struct sockaddr_in6 *addr = (struct sockaddr_in6 *)uaddr; ··· 438 438 goto out; 439 439 } 440 440 441 - int inet6_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len) 441 + int inet6_bind_sk(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len) 442 442 { 443 443 u32 flags = BIND_WITH_LOCK; 444 444 const struct proto *prot; ··· 467 467 /* bind for INET6 API */ 468 468 int inet6_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len) 469 469 { 470 - return inet6_bind_sk(sock->sk, (struct sockaddr *)uaddr, addr_len); 470 + return inet6_bind_sk(sock->sk, uaddr, addr_len); 471 471 } 472 472 EXPORT_SYMBOL(inet6_bind); 473 473
+4 -4
net/ipv6/datagram.c
··· 138 138 } 139 139 EXPORT_SYMBOL_GPL(ip6_datagram_release_cb); 140 140 141 - int __ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr, 141 + int __ip6_datagram_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 142 142 int addr_len) 143 143 { 144 144 struct sockaddr_in6 *usin = (struct sockaddr_in6 *) uaddr; ··· 194 194 sin.sin_port = usin->sin6_port; 195 195 196 196 err = __ip4_datagram_connect(sk, 197 - (struct sockaddr *) &sin, 197 + (struct sockaddr_unsized *)&sin, 198 198 sizeof(sin)); 199 199 200 200 ipv4_connected: ··· 271 271 } 272 272 EXPORT_SYMBOL_GPL(__ip6_datagram_connect); 273 273 274 - int ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) 274 + int ip6_datagram_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len) 275 275 { 276 276 int res; 277 277 ··· 282 282 } 283 283 EXPORT_SYMBOL_GPL(ip6_datagram_connect); 284 284 285 - int ip6_datagram_connect_v6_only(struct sock *sk, struct sockaddr *uaddr, 285 + int ip6_datagram_connect_v6_only(struct sock *sk, struct sockaddr_unsized *uaddr, 286 286 int addr_len) 287 287 { 288 288 DECLARE_SOCKADDR(struct sockaddr_in6 *, sin6, uaddr);
+1 -1
net/ipv6/ping.c
··· 45 45 return 0; 46 46 } 47 47 48 - static int ping_v6_pre_connect(struct sock *sk, struct sockaddr *uaddr, 48 + static int ping_v6_pre_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 49 49 int addr_len) 50 50 { 51 51 /* This check is replicated from __ip6_datagram_connect() and
+2 -1
net/ipv6/raw.c
··· 214 214 } 215 215 216 216 /* This cleans up af_inet6 a bit. -DaveM */ 217 - static int rawv6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) 217 + static int rawv6_bind(struct sock *sk, struct sockaddr_unsized *uaddr, 218 + int addr_len) 218 219 { 219 220 struct inet_sock *inet = inet_sk(sk); 220 221 struct ipv6_pinfo *np = inet6_sk(sk);
+3 -3
net/ipv6/tcp_ipv6.c
··· 118 118 ipv6_hdr(skb)->saddr.s6_addr32); 119 119 } 120 120 121 - static int tcp_v6_pre_connect(struct sock *sk, struct sockaddr *uaddr, 121 + static int tcp_v6_pre_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 122 122 int addr_len) 123 123 { 124 124 /* This check is replicated from tcp_v6_connect() and intended to ··· 133 133 return BPF_CGROUP_RUN_PROG_INET6_CONNECT(sk, uaddr, &addr_len); 134 134 } 135 135 136 - static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, 136 + static int tcp_v6_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 137 137 int addr_len) 138 138 { 139 139 struct sockaddr_in6 *usin = (struct sockaddr_in6 *) uaddr; ··· 238 238 tp->af_specific = &tcp_sock_ipv6_mapped_specific; 239 239 #endif 240 240 241 - err = tcp_v4_connect(sk, (struct sockaddr *)&sin, sizeof(sin)); 241 + err = tcp_v4_connect(sk, (struct sockaddr_unsized *)&sin, sizeof(sin)); 242 242 243 243 if (err) { 244 244 icsk->icsk_ext_hdr_len = exthdrlen;
+3 -2
net/ipv6/udp.c
··· 1282 1282 } 1283 1283 } 1284 1284 1285 - static int udpv6_pre_connect(struct sock *sk, struct sockaddr *uaddr, 1285 + static int udpv6_pre_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 1286 1286 int addr_len) 1287 1287 { 1288 1288 if (addr_len < offsetofend(struct sockaddr, sa_family)) ··· 1303 1303 return BPF_CGROUP_RUN_PROG_INET6_CONNECT_LOCK(sk, uaddr, &addr_len); 1304 1304 } 1305 1305 1306 - static int udpv6_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) 1306 + static int udpv6_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 1307 + int addr_len) 1307 1308 { 1308 1309 int res; 1309 1310
+4 -2
net/l2tp/l2tp_ip.c
··· 267 267 } 268 268 } 269 269 270 - static int l2tp_ip_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) 270 + static int l2tp_ip_bind(struct sock *sk, struct sockaddr_unsized *uaddr, 271 + int addr_len) 271 272 { 272 273 struct inet_sock *inet = inet_sk(sk); 273 274 struct sockaddr_l2tpip *addr = (struct sockaddr_l2tpip *)uaddr; ··· 329 328 return ret; 330 329 } 331 330 332 - static int l2tp_ip_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) 331 + static int l2tp_ip_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 332 + int addr_len) 333 333 { 334 334 struct sockaddr_l2tpip *lsa = (struct sockaddr_l2tpip *)uaddr; 335 335 struct l2tp_ip_net *pn = l2tp_ip_pernet(sock_net(sk));
+3 -2
net/l2tp/l2tp_ip6.c
··· 280 280 } 281 281 } 282 282 283 - static int l2tp_ip6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) 283 + static int l2tp_ip6_bind(struct sock *sk, struct sockaddr_unsized *uaddr, 284 + int addr_len) 284 285 { 285 286 struct inet_sock *inet = inet_sk(sk); 286 287 struct ipv6_pinfo *np = inet6_sk(sk); ··· 384 383 return err; 385 384 } 386 385 387 - static int l2tp_ip6_connect(struct sock *sk, struct sockaddr *uaddr, 386 + static int l2tp_ip6_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 388 387 int addr_len) 389 388 { 390 389 struct sockaddr_l2tpip6 *lsa = (struct sockaddr_l2tpip6 *)uaddr;
+2 -2
net/mptcp/pm_kernel.c
··· 867 867 addrlen = sizeof(struct sockaddr_in6); 868 868 #endif 869 869 if (ssk->sk_family == AF_INET) 870 - err = inet_bind_sk(ssk, (struct sockaddr *)&addr, addrlen); 870 + err = inet_bind_sk(ssk, (struct sockaddr_unsized *)&addr, addrlen); 871 871 #if IS_ENABLED(CONFIG_MPTCP_IPV6) 872 872 else if (ssk->sk_family == AF_INET6) 873 - err = inet6_bind_sk(ssk, (struct sockaddr *)&addr, addrlen); 873 + err = inet6_bind_sk(ssk, (struct sockaddr_unsized *)&addr, addrlen); 874 874 #endif 875 875 if (err) 876 876 return err;
+4 -3
net/mptcp/protocol.c
··· 3746 3746 return 0; 3747 3747 } 3748 3748 3749 - static int mptcp_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) 3749 + static int mptcp_connect(struct sock *sk, struct sockaddr_unsized *uaddr, 3750 + int addr_len) 3750 3751 { 3751 3752 struct mptcp_subflow_context *subflow; 3752 3753 struct mptcp_sock *msk = mptcp_sk(sk); ··· 3871 3870 } 3872 3871 3873 3872 if (sk->sk_family == AF_INET) 3874 - err = inet_bind_sk(ssk, (struct sockaddr *)uaddr, addr_len); 3873 + err = inet_bind_sk(ssk, uaddr, addr_len); 3875 3874 #if IS_ENABLED(CONFIG_MPTCP_IPV6) 3876 3875 else if (sk->sk_family == AF_INET6) 3877 - err = inet6_bind_sk(ssk, (struct sockaddr *)uaddr, addr_len); 3876 + err = inet6_bind_sk(ssk, uaddr, addr_len); 3878 3877 #endif 3879 3878 if (!err) 3880 3879 mptcp_copy_inaddrs(sk, ssk);
+2 -1
net/phonet/pep.c
··· 882 882 return newsk; 883 883 } 884 884 885 - static int pep_sock_connect(struct sock *sk, struct sockaddr *addr, int len) 885 + static int pep_sock_connect(struct sock *sk, struct sockaddr_unsized *addr, 886 + int len) 886 887 { 887 888 struct pep_sock *pn = pep_sk(sk); 888 889 int err;
+2 -2
net/phonet/socket.c
··· 163 163 u8 saddr; 164 164 165 165 if (sk->sk_prot->bind) 166 - return sk->sk_prot->bind(sk, (struct sockaddr *)addr, len); 166 + return sk->sk_prot->bind(sk, addr, len); 167 167 168 168 if (len < sizeof(struct sockaddr_pn)) 169 169 return -EINVAL; ··· 252 252 pn->resource = pn_sockaddr_get_resource(spn); 253 253 sock->state = SS_CONNECTING; 254 254 255 - err = sk->sk_prot->connect(sk, (struct sockaddr *)addr, len); 255 + err = sk->sk_prot->connect(sk, addr, len); 256 256 if (err) { 257 257 sock->state = SS_UNCONNECTED; 258 258 pn->dobject = 0;
+5 -4
net/sctp/socket.c
··· 306 306 * sockaddr_in6 [RFC 2553]), 307 307 * addr_len - the size of the address structure. 308 308 */ 309 - static int sctp_bind(struct sock *sk, struct sockaddr *addr, int addr_len) 309 + static int sctp_bind(struct sock *sk, struct sockaddr_unsized *addr, 310 + int addr_len) 310 311 { 311 312 int retval = 0; 312 313 ··· 1054 1053 } 1055 1054 } 1056 1055 1057 - static int sctp_bind_add(struct sock *sk, struct sockaddr *addrs, 1058 - int addrlen) 1056 + static int sctp_bind_add(struct sock *sk, struct sockaddr_unsized *addrs, 1057 + int addrlen) 1059 1058 { 1060 1059 int err; 1061 1060 1062 1061 lock_sock(sk); 1063 - err = sctp_setsockopt_bindx(sk, addrs, addrlen, SCTP_BINDX_ADD_ADDR); 1062 + err = sctp_setsockopt_bindx(sk, (struct sockaddr *)addrs, addrlen, SCTP_BINDX_ADD_ADDR); 1064 1063 release_sock(sk); 1065 1064 return err; 1066 1065 }