net: Convert proto_ops connect() callbacks to use sockaddr_unsized

Update all struct proto_ops connect() callback function prototypes from
"struct sockaddr *" to "struct sockaddr_unsized *" to avoid lying to the
compiler about object sizes. Calls into struct proto handlers gain casts
that will be removed in the struct proto conversion patch.

No binary changes expected.

Signed-off-by: Kees Cook <kees@kernel.org>
Link: https://patch.msgid.link/20251104002617.2752303-3-kees@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Kees Cook 2025-11-03 16:26:11 -08:00 committed by Jakub Kicinski
parent 0e50474fa5
commit 85cb0757d7
72 changed files with 110 additions and 106 deletions

View File

@ -458,7 +458,7 @@ static struct socket *drbd_try_connect(struct drbd_connection *connection)
* stay C_WF_CONNECTION, don't go Disconnecting! */ * stay C_WF_CONNECTION, don't go Disconnecting! */
disconnect_on_error = 0; disconnect_on_error = 0;
what = "connect"; what = "connect";
err = sock->ops->connect(sock, (struct sockaddr *) &peer_in6, peer_addr_len, 0); err = sock->ops->connect(sock, (struct sockaddr_unsized *) &peer_in6, peer_addr_len, 0);
out: out:
if (err < 0) { if (err < 0) {

View File

@ -996,7 +996,7 @@ static int kernel_bindconnect(struct socket *s, struct sockaddr *laddr,
ret = s->ops->bind(s, (struct sockaddr_unsized *)laddr, laddrlen); ret = s->ops->bind(s, (struct sockaddr_unsized *)laddr, laddrlen);
if (ret) if (ret)
return ret; return ret;
ret = s->ops->connect(s, raddr, raddrlen, flags); ret = s->ops->connect(s, (struct sockaddr_unsized *)raddr, raddrlen, flags);
return ret < 0 ? ret : 0; return ret < 0 ? ret : 0;
} }

View File

@ -1344,7 +1344,7 @@ static int kernel_bindconnect(struct socket *s, struct sockaddr *laddr,
if (rv < 0) if (rv < 0)
return rv; return rv;
rv = s->ops->connect(s, raddr, size, flags); rv = s->ops->connect(s, (struct sockaddr_unsized *)raddr, size, flags);
return rv < 0 ? rv : 0; return rv < 0 ? rv : 0;
} }

View File

@ -608,8 +608,8 @@ static int pppoe_release(struct socket *sock)
return 0; return 0;
} }
static int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr, static int pppoe_connect(struct socket *sock, struct sockaddr_unsized *uservaddr,
int sockaddr_len, int flags) int sockaddr_len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
struct sockaddr_pppox *sp = (struct sockaddr_pppox *)uservaddr; struct sockaddr_pppox *sp = (struct sockaddr_pppox *)uservaddr;

View File

@ -415,8 +415,8 @@ static int pptp_bind(struct socket *sock, struct sockaddr_unsized *uservaddr,
return error; return error;
} }
static int pptp_connect(struct socket *sock, struct sockaddr *uservaddr, static int pptp_connect(struct socket *sock, struct sockaddr_unsized *uservaddr,
int sockaddr_len, int flags) int sockaddr_len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
struct sockaddr_pppox *sp = (struct sockaddr_pppox *) uservaddr; struct sockaddr_pppox *sp = (struct sockaddr_pppox *) uservaddr;

View File

@ -986,7 +986,7 @@ static int ath10k_qmi_new_server(struct qmi_handle *qmi_hdl,
ath10k_dbg(ar, ATH10K_DBG_QMI, "wifi fw qmi service found\n"); ath10k_dbg(ar, ATH10K_DBG_QMI, "wifi fw qmi service found\n");
ret = kernel_connect(qmi_hdl->sock, (struct sockaddr *)&qmi->sq, ret = kernel_connect(qmi_hdl->sock, (struct sockaddr_unsized *)&qmi->sq,
sizeof(qmi->sq), 0); sizeof(qmi->sq), 0);
if (ret) { if (ret) {
ath10k_err(ar, "failed to connect to a remote QMI service port\n"); ath10k_err(ar, "failed to connect to a remote QMI service port\n");

View File

@ -3177,7 +3177,7 @@ static int ath11k_qmi_ops_new_server(struct qmi_handle *qmi_hdl,
sq->sq_node = service->node; sq->sq_node = service->node;
sq->sq_port = service->port; sq->sq_port = service->port;
ret = kernel_connect(qmi_hdl->sock, (struct sockaddr *)sq, ret = kernel_connect(qmi_hdl->sock, (struct sockaddr_unsized *)sq,
sizeof(*sq), 0); sizeof(*sq), 0);
if (ret) { if (ret) {
ath11k_warn(ab, "failed to connect to qmi remote service: %d\n", ret); ath11k_warn(ab, "failed to connect to qmi remote service: %d\n", ret);

View File

@ -3740,7 +3740,7 @@ static int ath12k_qmi_ops_new_server(struct qmi_handle *qmi_hdl,
sq->sq_node = service->node; sq->sq_node = service->node;
sq->sq_port = service->port; sq->sq_port = service->port;
ret = kernel_connect(qmi_hdl->sock, (struct sockaddr *)sq, ret = kernel_connect(qmi_hdl->sock, (struct sockaddr_unsized *)sq,
sizeof(*sq), 0); sizeof(*sq), 0);
if (ret) { if (ret) {
ath12k_warn(ab, "qmi failed to connect to remote service %d\n", ret); ath12k_warn(ab, "qmi failed to connect to remote service %d\n", ret);

View File

@ -1872,7 +1872,7 @@ static int nvme_tcp_alloc_queue(struct nvme_ctrl *nctrl, int qid,
dev_dbg(nctrl->device, "connecting queue %d\n", dev_dbg(nctrl->device, "connecting queue %d\n",
nvme_tcp_queue_id(queue)); nvme_tcp_queue_id(queue));
ret = kernel_connect(queue->sock, (struct sockaddr *)&ctrl->addr, ret = kernel_connect(queue->sock, (struct sockaddr_unsized *)&ctrl->addr,
sizeof(ctrl->addr), 0); sizeof(ctrl->addr), 0);
if (ret) { if (ret) {
dev_err(nctrl->device, dev_err(nctrl->device,

View File

@ -463,7 +463,7 @@ static int qcom_slim_qmi_init(struct qcom_slim_ngd_ctrl *ctrl,
} }
rc = kernel_connect(handle->sock, rc = kernel_connect(handle->sock,
(struct sockaddr *)&ctrl->qmi.svc_info, (struct sockaddr_unsized *)&ctrl->qmi.svc_info,
sizeof(ctrl->qmi.svc_info), 0); sizeof(ctrl->qmi.svc_info), 0);
if (rc < 0) { if (rc < 0) {
dev_err(ctrl->dev, "Remote Service connect failed: %d\n", rc); dev_err(ctrl->dev, "Remote Service connect failed: %d\n", rc);

View File

@ -409,7 +409,7 @@ static int pvcalls_back_connect(struct xenbus_device *dev,
ret = sock_create(AF_INET, SOCK_STREAM, 0, &sock); ret = sock_create(AF_INET, SOCK_STREAM, 0, &sock);
if (ret < 0) if (ret < 0)
goto out; goto out;
ret = inet_stream_connect(sock, sa, req->u.connect.len, 0); ret = inet_stream_connect(sock, (struct sockaddr_unsized *)sa, req->u.connect.len, 0);
if (ret < 0) { if (ret < 0) {
sock_release(sock); sock_release(sock);
goto out; goto out;

View File

@ -708,7 +708,7 @@ static bool coredump_sock_connect(struct core_name *cn, struct coredump_params *
*/ */
pidfs_coredump(cprm); pidfs_coredump(cprm);
retval = kernel_connect(socket, (struct sockaddr *)(&addr), addr_len, retval = kernel_connect(socket, (struct sockaddr_unsized *)(&addr), addr_len,
O_NONBLOCK | SOCK_COREDUMP); O_NONBLOCK | SOCK_COREDUMP);
if (retval) { if (retval) {

View File

@ -1599,7 +1599,7 @@ static int dlm_connect(struct connection *con)
log_print_ratelimited("connecting to %d", con->nodeid); log_print_ratelimited("connecting to %d", con->nodeid);
make_sockaddr(&addr, dlm_config.ci_tcp_port, &addr_len); make_sockaddr(&addr, dlm_config.ci_tcp_port, &addr_len);
result = kernel_connect(sock, (struct sockaddr *)&addr, addr_len, 0); result = kernel_connect(sock, (struct sockaddr_unsized *)&addr, addr_len, 0);
switch (result) { switch (result) {
case -EINPROGRESS: case -EINPROGRESS:
/* not an error */ /* not an error */

View File

@ -1638,7 +1638,7 @@ static void o2net_start_connect(struct work_struct *work)
remoteaddr.sin_port = node->nd_ipv4_port; remoteaddr.sin_port = node->nd_ipv4_port;
ret = sc->sc_sock->ops->connect(sc->sc_sock, ret = sc->sc_sock->ops->connect(sc->sc_sock,
(struct sockaddr *)&remoteaddr, (struct sockaddr_unsized *)&remoteaddr,
sizeof(remoteaddr), sizeof(remoteaddr),
O_NONBLOCK); O_NONBLOCK);
if (ret == -EINPROGRESS) if (ret == -EINPROGRESS)

View File

@ -3411,7 +3411,7 @@ generic_ip_connect(struct TCP_Server_Info *server)
socket->sk->sk_sndbuf, socket->sk->sk_sndbuf,
socket->sk->sk_rcvbuf, socket->sk->sk_rcvtimeo); socket->sk->sk_rcvbuf, socket->sk->sk_rcvtimeo);
rc = kernel_connect(socket, saddr, slen, rc = kernel_connect(socket, (struct sockaddr_unsized *)saddr, slen,
server->noblockcnt ? O_NONBLOCK : 0); server->noblockcnt ? O_NONBLOCK : 0);
/* /*
* When mounting SMB root file systems, we do not want to block in * When mounting SMB root file systems, we do not want to block in

View File

@ -238,7 +238,7 @@ static inline bool cgroup_bpf_sock_enabled(struct sock *sk,
({ \ ({ \
int __ret = 0; \ int __ret = 0; \
if (cgroup_bpf_enabled(atype)) \ if (cgroup_bpf_enabled(atype)) \
__ret = __cgroup_bpf_run_filter_sock_addr(sk, uaddr, uaddrlen, \ __ret = __cgroup_bpf_run_filter_sock_addr(sk, (struct sockaddr *)uaddr, uaddrlen, \
atype, NULL, NULL); \ atype, NULL, NULL); \
__ret; \ __ret; \
}) })
@ -248,7 +248,7 @@ static inline bool cgroup_bpf_sock_enabled(struct sock *sk,
int __ret = 0; \ int __ret = 0; \
if (cgroup_bpf_enabled(atype)) { \ if (cgroup_bpf_enabled(atype)) { \
lock_sock(sk); \ lock_sock(sk); \
__ret = __cgroup_bpf_run_filter_sock_addr(sk, uaddr, uaddrlen, \ __ret = __cgroup_bpf_run_filter_sock_addr(sk, (struct sockaddr *)uaddr, uaddrlen, \
atype, t_ctx, NULL); \ atype, t_ctx, NULL); \
release_sock(sk); \ release_sock(sk); \
} \ } \
@ -266,7 +266,7 @@ static inline bool cgroup_bpf_sock_enabled(struct sock *sk,
int __ret = 0; \ int __ret = 0; \
if (cgroup_bpf_enabled(atype)) { \ if (cgroup_bpf_enabled(atype)) { \
lock_sock(sk); \ lock_sock(sk); \
__ret = __cgroup_bpf_run_filter_sock_addr(sk, uaddr, uaddrlen, \ __ret = __cgroup_bpf_run_filter_sock_addr(sk, (struct sockaddr *)uaddr, uaddrlen, \
atype, NULL, &__flags); \ atype, NULL, &__flags); \
release_sock(sk); \ release_sock(sk); \
if (__flags & BPF_RET_BIND_NO_CAP_NET_BIND_SERVICE) \ if (__flags & BPF_RET_BIND_NO_CAP_NET_BIND_SERVICE) \

View File

@ -166,7 +166,7 @@ struct proto_ops {
struct sockaddr_unsized *myaddr, struct sockaddr_unsized *myaddr,
int sockaddr_len); int sockaddr_len);
int (*connect) (struct socket *sock, int (*connect) (struct socket *sock,
struct sockaddr *vaddr, struct sockaddr_unsized *vaddr,
int sockaddr_len, int flags); int sockaddr_len, int flags);
int (*socketpair)(struct socket *sock1, int (*socketpair)(struct socket *sock1,
struct socket *sock2); struct socket *sock2);
@ -348,7 +348,7 @@ int kernel_recvmsg(struct socket *sock, struct msghdr *msg, struct kvec *vec,
int kernel_bind(struct socket *sock, struct sockaddr_unsized *addr, int addrlen); int kernel_bind(struct socket *sock, struct sockaddr_unsized *addr, int addrlen);
int kernel_listen(struct socket *sock, int backlog); int kernel_listen(struct socket *sock, int backlog);
int kernel_accept(struct socket *sock, struct socket **newsock, int flags); int kernel_accept(struct socket *sock, struct socket **newsock, int flags);
int kernel_connect(struct socket *sock, struct sockaddr *addr, int addrlen, int kernel_connect(struct socket *sock, struct sockaddr_unsized *addr, int addrlen,
int flags); int flags);
int kernel_getsockname(struct socket *sock, struct sockaddr *addr); int kernel_getsockname(struct socket *sock, struct sockaddr *addr);
int kernel_getpeername(struct socket *sock, struct sockaddr *addr); int kernel_getpeername(struct socket *sock, struct sockaddr *addr);

View File

@ -23,11 +23,11 @@ struct sockaddr;
struct socket; struct socket;
int inet_release(struct socket *sock); int inet_release(struct socket *sock);
int inet_stream_connect(struct socket *sock, struct sockaddr *uaddr, int inet_stream_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags); int addr_len, int flags);
int __inet_stream_connect(struct socket *sock, struct sockaddr *uaddr, int __inet_stream_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags, int is_sendmsg); int addr_len, int flags, int is_sendmsg);
int inet_dgram_connect(struct socket *sock, struct sockaddr *uaddr, int inet_dgram_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags); int addr_len, int flags);
int inet_accept(struct socket *sock, struct socket *newsock, int inet_accept(struct socket *sock, struct socket *newsock,
struct proto_accept_arg *arg); struct proto_accept_arg *arg);

View File

@ -85,7 +85,7 @@ void sctp_udp_sock_stop(struct net *net);
/* /*
* sctp/socket.c * sctp/socket.c
*/ */
int sctp_inet_connect(struct socket *sock, struct sockaddr *uaddr, int sctp_inet_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags); int addr_len, int flags);
int sctp_backlog_rcv(struct sock *sk, struct sk_buff *skb); int sctp_backlog_rcv(struct sock *sk, struct sk_buff *skb);
int sctp_inet_listen(struct socket *sock, int backlog); int sctp_inet_listen(struct socket *sock, int backlog);

View File

@ -1921,7 +1921,7 @@ int sock_cmsg_send(struct sock *sk, struct msghdr *msg,
* does not implement a particular function. * does not implement a particular function.
*/ */
int sock_no_bind(struct socket *sock, struct sockaddr_unsized *saddr, int len); int sock_no_bind(struct socket *sock, struct sockaddr_unsized *saddr, int len);
int sock_no_connect(struct socket *, struct sockaddr *, int, int); int sock_no_connect(struct socket *sock, struct sockaddr_unsized *saddr, int len, int flags);
int sock_no_socketpair(struct socket *, struct socket *); int sock_no_socketpair(struct socket *, struct socket *);
int sock_no_accept(struct socket *, struct socket *, struct proto_accept_arg *); int sock_no_accept(struct socket *, struct socket *, struct proto_accept_arg *);
int sock_no_getname(struct socket *, struct sockaddr *, int); int sock_no_getname(struct socket *, struct sockaddr *, int);

View File

@ -16,7 +16,7 @@ bool vsock_addr_bound(const struct sockaddr_vm *addr);
void vsock_addr_unbind(struct sockaddr_vm *addr); void vsock_addr_unbind(struct sockaddr_vm *addr);
bool vsock_addr_equals_addr(const struct sockaddr_vm *addr, bool vsock_addr_equals_addr(const struct sockaddr_vm *addr,
const struct sockaddr_vm *other); const struct sockaddr_vm *other);
int vsock_addr_cast(const struct sockaddr *addr, size_t len, int vsock_addr_cast(const struct sockaddr_unsized *addr, size_t len,
struct sockaddr_vm **out_addr); struct sockaddr_vm **out_addr);
#endif #endif

View File

@ -1018,7 +1018,7 @@ p9_fd_create_tcp(struct p9_client *client, const char *addr, char *args)
} }
err = READ_ONCE(csocket->ops)->connect(csocket, err = READ_ONCE(csocket->ops)->connect(csocket,
(struct sockaddr *)&stor, (struct sockaddr_unsized *)&stor,
sizeof(stor), 0); sizeof(stor), 0);
if (err < 0) { if (err < 0) {
pr_err("%s (%d): problem connecting socket to %s\n", pr_err("%s (%d): problem connecting socket to %s\n",
@ -1058,8 +1058,8 @@ p9_fd_create_unix(struct p9_client *client, const char *addr, char *args)
return err; return err;
} }
err = READ_ONCE(csocket->ops)->connect(csocket, (struct sockaddr *)&sun_server, err = READ_ONCE(csocket->ops)->connect(csocket, (struct sockaddr_unsized *)&sun_server,
sizeof(struct sockaddr_un) - 1, 0); sizeof(struct sockaddr_un) - 1, 0);
if (err < 0) { if (err < 0) {
pr_err("%s (%d): problem connecting socket: %s: %d\n", pr_err("%s (%d): problem connecting socket: %s: %d\n",
__func__, task_pid_nr(current), addr, err); __func__, task_pid_nr(current), addr, err);

View File

@ -1204,7 +1204,7 @@ static int atalk_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int a
} }
/* Set the address we talk to */ /* Set the address we talk to */
static int atalk_connect(struct socket *sock, struct sockaddr *uaddr, static int atalk_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags) int addr_len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;

View File

@ -56,10 +56,10 @@ static int pvc_bind(struct socket *sock, struct sockaddr_unsized *sockaddr,
return error; return error;
} }
static int pvc_connect(struct socket *sock, struct sockaddr *sockaddr, static int pvc_connect(struct socket *sock, struct sockaddr_unsized *sockaddr,
int sockaddr_len, int flags) int sockaddr_len, int flags)
{ {
return pvc_bind(sock, (struct sockaddr_unsized *)sockaddr, sockaddr_len); return pvc_bind(sock, sockaddr, sockaddr_len);
} }
static int pvc_setsockopt(struct socket *sock, int level, int optname, static int pvc_setsockopt(struct socket *sock, int level, int optname,

View File

@ -153,7 +153,7 @@ static int svc_bind(struct socket *sock, struct sockaddr_unsized *sockaddr,
return error; return error;
} }
static int svc_connect(struct socket *sock, struct sockaddr *sockaddr, static int svc_connect(struct socket *sock, struct sockaddr_unsized *sockaddr,
int sockaddr_len, int flags) int sockaddr_len, int flags)
{ {
DEFINE_WAIT(wait); DEFINE_WAIT(wait);

View File

@ -1175,7 +1175,7 @@ static int ax25_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int ad
* FIXME: nonblock behaviour looks like it may have a bug. * FIXME: nonblock behaviour looks like it may have a bug.
*/ */
static int __must_check ax25_connect(struct socket *sock, static int __must_check ax25_connect(struct socket *sock,
struct sockaddr *uaddr, int addr_len, int flags) struct sockaddr_unsized *uaddr, int addr_len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
ax25_cb *ax25 = sk_to_ax25(sk), *ax25t; ax25_cb *ax25 = sk_to_ax25(sk), *ax25t;

View File

@ -1080,7 +1080,7 @@ static int iso_sock_bind(struct socket *sock, struct sockaddr_unsized *addr,
return err; return err;
} }
static int iso_sock_connect(struct socket *sock, struct sockaddr *addr, static int iso_sock_connect(struct socket *sock, struct sockaddr_unsized *addr,
int alen, int flags) int alen, int flags)
{ {
struct sockaddr_iso *sa = (struct sockaddr_iso *)addr; struct sockaddr_iso *sa = (struct sockaddr_iso *)addr;

View File

@ -178,7 +178,7 @@ static int l2cap_sock_bind(struct socket *sock, struct sockaddr_unsized *addr, i
return err; return err;
} }
static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, static int l2cap_sock_connect(struct socket *sock, struct sockaddr_unsized *addr,
int alen, int flags) int alen, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;

View File

@ -808,7 +808,7 @@ static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src,
addr.l2_psm = cpu_to_le16(L2CAP_PSM_RFCOMM); addr.l2_psm = cpu_to_le16(L2CAP_PSM_RFCOMM);
addr.l2_cid = 0; addr.l2_cid = 0;
addr.l2_bdaddr_type = BDADDR_BREDR; addr.l2_bdaddr_type = BDADDR_BREDR;
*err = kernel_connect(sock, (struct sockaddr *) &addr, sizeof(addr), O_NONBLOCK); *err = kernel_connect(sock, (struct sockaddr_unsized *)&addr, sizeof(addr), O_NONBLOCK);
if (*err == 0 || *err == -EINPROGRESS) if (*err == 0 || *err == -EINPROGRESS)
return s; return s;

View File

@ -371,7 +371,8 @@ static int rfcomm_sock_bind(struct socket *sock, struct sockaddr_unsized *addr,
return err; return err;
} }
static int rfcomm_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags) static int rfcomm_sock_connect(struct socket *sock, struct sockaddr_unsized *addr,
int alen, int flags)
{ {
struct sockaddr_rc *sa = (struct sockaddr_rc *) addr; struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
struct sock *sk = sock->sk; struct sock *sk = sock->sk;

View File

@ -639,7 +639,7 @@ static int sco_sock_bind(struct socket *sock, struct sockaddr_unsized *addr,
return err; return err;
} }
static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags) static int sco_sock_connect(struct socket *sock, struct sockaddr_unsized *addr, int alen, int flags)
{ {
struct sockaddr_sco *sa = (struct sockaddr_sco *) addr; struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
struct sock *sk = sock->sk; struct sock *sk = sock->sk;

View File

@ -734,7 +734,7 @@ static int setsockopt(struct socket *sock, int lvl, int opt, sockptr_t ov,
* o sock->state: holds the SS_* socket state and is updated by connect and * o sock->state: holds the SS_* socket state and is updated by connect and
* disconnect. * disconnect.
*/ */
static int caif_connect(struct socket *sock, struct sockaddr *uaddr, static int caif_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags) int addr_len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;

View File

@ -1657,7 +1657,7 @@ static int bcm_release(struct socket *sock)
return 0; return 0;
} }
static int bcm_connect(struct socket *sock, struct sockaddr *uaddr, int len, static int bcm_connect(struct socket *sock, struct sockaddr_unsized *uaddr, int len,
int flags) int flags)
{ {
struct sockaddr_can *addr = (struct sockaddr_can *)uaddr; struct sockaddr_can *addr = (struct sockaddr_can *)uaddr;

View File

@ -535,7 +535,7 @@ static int j1939_sk_bind(struct socket *sock, struct sockaddr_unsized *uaddr, in
return ret; return ret;
} }
static int j1939_sk_connect(struct socket *sock, struct sockaddr *uaddr, static int j1939_sk_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int len, int flags) int len, int flags)
{ {
struct sockaddr_can *addr = (struct sockaddr_can *)uaddr; struct sockaddr_can *addr = (struct sockaddr_can *)uaddr;

View File

@ -460,7 +460,7 @@ int ceph_tcp_connect(struct ceph_connection *con)
set_sock_callbacks(sock, con); set_sock_callbacks(sock, con);
con_sock_state_connecting(con); con_sock_state_connecting(con);
ret = kernel_connect(sock, (struct sockaddr *)&ss, sizeof(ss), ret = kernel_connect(sock, (struct sockaddr_unsized *)&ss, sizeof(ss),
O_NONBLOCK); O_NONBLOCK);
if (ret == -EINPROGRESS) { if (ret == -EINPROGRESS) {
dout("connect %s EINPROGRESS sk_state = %u\n", dout("connect %s EINPROGRESS sk_state = %u\n",

View File

@ -3468,7 +3468,7 @@ int sock_no_bind(struct socket *sock, struct sockaddr_unsized *saddr, int len)
} }
EXPORT_SYMBOL(sock_no_bind); EXPORT_SYMBOL(sock_no_bind);
int sock_no_connect(struct socket *sock, struct sockaddr *saddr, int sock_no_connect(struct socket *sock, struct sockaddr_unsized *saddr,
int len, int flags) int len, int flags)
{ {
return -EOPNOTSUPP; return -EOPNOTSUPP;

View File

@ -107,7 +107,7 @@ static int ieee802154_sock_bind(struct socket *sock, struct sockaddr_unsized *ua
return sock_no_bind(sock, uaddr, addr_len); return sock_no_bind(sock, uaddr, addr_len);
} }
static int ieee802154_sock_connect(struct socket *sock, struct sockaddr *uaddr, static int ieee802154_sock_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags) int addr_len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
@ -118,7 +118,7 @@ static int ieee802154_sock_connect(struct socket *sock, struct sockaddr *uaddr,
if (uaddr->sa_family == AF_UNSPEC) if (uaddr->sa_family == AF_UNSPEC)
return sk->sk_prot->disconnect(sk, flags); return sk->sk_prot->disconnect(sk, flags);
return sk->sk_prot->connect(sk, uaddr, addr_len); return sk->sk_prot->connect(sk, (struct sockaddr *)uaddr, addr_len);
} }
static int ieee802154_dev_ioctl(struct sock *sk, struct ifreq __user *arg, static int ieee802154_dev_ioctl(struct sock *sk, struct ifreq __user *arg,

View File

@ -567,7 +567,7 @@ int __inet_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len,
return err; return err;
} }
int inet_dgram_connect(struct socket *sock, struct sockaddr *uaddr, int inet_dgram_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags) int addr_len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
@ -584,14 +584,14 @@ int inet_dgram_connect(struct socket *sock, struct sockaddr *uaddr,
return prot->disconnect(sk, flags); return prot->disconnect(sk, flags);
if (BPF_CGROUP_PRE_CONNECT_ENABLED(sk)) { if (BPF_CGROUP_PRE_CONNECT_ENABLED(sk)) {
err = prot->pre_connect(sk, uaddr, addr_len); err = prot->pre_connect(sk, (struct sockaddr *)uaddr, addr_len);
if (err) if (err)
return err; return err;
} }
if (data_race(!inet_sk(sk)->inet_num) && inet_autobind(sk)) if (data_race(!inet_sk(sk)->inet_num) && inet_autobind(sk))
return -EAGAIN; return -EAGAIN;
return prot->connect(sk, uaddr, addr_len); return prot->connect(sk, (struct sockaddr *)uaddr, addr_len);
} }
EXPORT_SYMBOL(inet_dgram_connect); EXPORT_SYMBOL(inet_dgram_connect);
@ -623,7 +623,7 @@ static long inet_wait_for_connect(struct sock *sk, long timeo, int writebias)
* Connect to a remote host. There is regrettably still a little * Connect to a remote host. There is regrettably still a little
* TCP 'magic' in here. * TCP 'magic' in here.
*/ */
int __inet_stream_connect(struct socket *sock, struct sockaddr *uaddr, int __inet_stream_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags, int is_sendmsg) int addr_len, int flags, int is_sendmsg)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
@ -671,12 +671,12 @@ int __inet_stream_connect(struct socket *sock, struct sockaddr *uaddr,
goto out; goto out;
if (BPF_CGROUP_PRE_CONNECT_ENABLED(sk)) { if (BPF_CGROUP_PRE_CONNECT_ENABLED(sk)) {
err = sk->sk_prot->pre_connect(sk, uaddr, addr_len); err = sk->sk_prot->pre_connect(sk, (struct sockaddr *)uaddr, addr_len);
if (err) if (err)
goto out; goto out;
} }
err = sk->sk_prot->connect(sk, uaddr, addr_len); err = sk->sk_prot->connect(sk, (struct sockaddr *)uaddr, addr_len);
if (err < 0) if (err < 0)
goto out; goto out;
@ -741,7 +741,7 @@ int __inet_stream_connect(struct socket *sock, struct sockaddr *uaddr,
} }
EXPORT_SYMBOL(__inet_stream_connect); EXPORT_SYMBOL(__inet_stream_connect);
int inet_stream_connect(struct socket *sock, struct sockaddr *uaddr, int inet_stream_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags) int addr_len, int flags)
{ {
int err; int err;

View File

@ -1061,7 +1061,7 @@ int tcp_sendmsg_fastopen(struct sock *sk, struct msghdr *msg, int *copied,
} }
} }
flags = (msg->msg_flags & MSG_DONTWAIT) ? O_NONBLOCK : 0; flags = (msg->msg_flags & MSG_DONTWAIT) ? O_NONBLOCK : 0;
err = __inet_stream_connect(sk->sk_socket, uaddr, err = __inet_stream_connect(sk->sk_socket, (struct sockaddr_unsized *)uaddr,
msg->msg_namelen, flags, 1); msg->msg_namelen, flags, 1);
/* fastopen_req could already be freed in __inet_stream_connect /* fastopen_req could already be freed in __inet_stream_connect
* if the connection times out or gets rst * if the connection times out or gets rst

View File

@ -38,7 +38,7 @@ int udp_sock_create4(struct net *net, struct udp_port_cfg *cfg,
udp_addr.sin_family = AF_INET; udp_addr.sin_family = AF_INET;
udp_addr.sin_addr = cfg->peer_ip; udp_addr.sin_addr = cfg->peer_ip;
udp_addr.sin_port = cfg->peer_udp_port; udp_addr.sin_port = cfg->peer_udp_port;
err = kernel_connect(sock, (struct sockaddr *)&udp_addr, err = kernel_connect(sock, (struct sockaddr_unsized *)&udp_addr,
sizeof(udp_addr), 0); sizeof(udp_addr), 0);
if (err < 0) if (err < 0)
goto error; goto error;

View File

@ -52,7 +52,7 @@ int udp_sock_create6(struct net *net, struct udp_port_cfg *cfg,
sizeof(udp6_addr.sin6_addr)); sizeof(udp6_addr.sin6_addr));
udp6_addr.sin6_port = cfg->peer_udp_port; udp6_addr.sin6_port = cfg->peer_udp_port;
err = kernel_connect(sock, err = kernel_connect(sock,
(struct sockaddr *)&udp6_addr, (struct sockaddr_unsized *)&udp6_addr,
sizeof(udp6_addr), 0); sizeof(udp6_addr), 0);
} }
if (err < 0) if (err < 0)

View File

@ -668,7 +668,7 @@ static int iucv_sock_autobind(struct sock *sk)
return err; return err;
} }
static int afiucv_path_connect(struct socket *sock, struct sockaddr *addr) static int afiucv_path_connect(struct socket *sock, struct sockaddr_unsized *addr)
{ {
DECLARE_SOCKADDR(struct sockaddr_iucv *, sa, addr); DECLARE_SOCKADDR(struct sockaddr_iucv *, sa, addr);
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
@ -714,7 +714,7 @@ static int afiucv_path_connect(struct socket *sock, struct sockaddr *addr)
} }
/* Connect an unconnected socket */ /* Connect an unconnected socket */
static int iucv_sock_connect(struct socket *sock, struct sockaddr *addr, static int iucv_sock_connect(struct socket *sock, struct sockaddr_unsized *addr,
int alen, int flags) int alen, int flags)
{ {
DECLARE_SOCKADDR(struct sockaddr_iucv *, sa, addr); DECLARE_SOCKADDR(struct sockaddr_iucv *, sa, addr);

View File

@ -1513,7 +1513,7 @@ static int l2tp_tunnel_sock_create(struct net *net,
sizeof(ip6_addr.l2tp_addr)); sizeof(ip6_addr.l2tp_addr));
ip6_addr.l2tp_conn_id = peer_tunnel_id; ip6_addr.l2tp_conn_id = peer_tunnel_id;
err = kernel_connect(sock, err = kernel_connect(sock,
(struct sockaddr *)&ip6_addr, (struct sockaddr_unsized *)&ip6_addr,
sizeof(ip6_addr), 0); sizeof(ip6_addr), 0);
if (err < 0) if (err < 0)
goto out; goto out;
@ -1538,7 +1538,7 @@ static int l2tp_tunnel_sock_create(struct net *net,
ip_addr.l2tp_family = AF_INET; ip_addr.l2tp_family = AF_INET;
ip_addr.l2tp_addr = cfg->peer_ip; ip_addr.l2tp_addr = cfg->peer_ip;
ip_addr.l2tp_conn_id = peer_tunnel_id; ip_addr.l2tp_conn_id = peer_tunnel_id;
err = kernel_connect(sock, (struct sockaddr *)&ip_addr, err = kernel_connect(sock, (struct sockaddr_unsized *)&ip_addr,
sizeof(ip_addr), 0); sizeof(ip_addr), 0);
if (err < 0) if (err < 0)
goto out; goto out;

View File

@ -684,7 +684,7 @@ static struct l2tp_tunnel *pppol2tp_tunnel_get(struct net *net,
/* connect() handler. Attach a PPPoX socket to a tunnel UDP socket /* connect() handler. Attach a PPPoX socket to a tunnel UDP socket
*/ */
static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr, static int pppol2tp_connect(struct socket *sock, struct sockaddr_unsized *uservaddr,
int sockaddr_len, int flags) int sockaddr_len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;

View File

@ -477,7 +477,7 @@ static int llc_ui_shutdown(struct socket *sock, int how)
* This function will autobind if user did not previously call bind. * This function will autobind if user did not previously call bind.
* Returns: 0 upon success, negative otherwise. * Returns: 0 upon success, negative otherwise.
*/ */
static int llc_ui_connect(struct socket *sock, struct sockaddr *uaddr, static int llc_ui_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addrlen, int flags) int addrlen, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;

View File

@ -128,7 +128,7 @@ static int mctp_bind(struct socket *sock, struct sockaddr_unsized *addr, int add
/* Used to set a specific peer prior to bind. Not used for outbound /* Used to set a specific peer prior to bind. Not used for outbound
* connections (Tag Owner set) since MCTP is a datagram protocol. * connections (Tag Owner set) since MCTP is a datagram protocol.
*/ */
static int mctp_connect(struct socket *sock, struct sockaddr *addr, static int mctp_connect(struct socket *sock, struct sockaddr_unsized *addr,
int addrlen, int flags) int addrlen, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;

View File

@ -279,7 +279,7 @@ void mctp_test_bind_run(struct kunit *test,
addr.smctp_addr.s_addr = setup->peer_addr; addr.smctp_addr.s_addr = setup->peer_addr;
/* connect() type must match bind() type */ /* connect() type must match bind() type */
addr.smctp_type = setup->bind_type; addr.smctp_type = setup->bind_type;
rc = kernel_connect(*sock, (struct sockaddr *)&addr, rc = kernel_connect(*sock, (struct sockaddr_unsized *)&addr,
sizeof(addr), 0); sizeof(addr), 0);
KUNIT_EXPECT_EQ(test, rc, 0); KUNIT_EXPECT_EQ(test, rc, 0);
} }
@ -292,5 +292,6 @@ void mctp_test_bind_run(struct kunit *test,
addr.smctp_type = setup->bind_type; addr.smctp_type = setup->bind_type;
*ret_bind_errno = *ret_bind_errno =
kernel_bind(*sock, (struct sockaddr *)&addr, sizeof(addr)); kernel_bind(*sock, (struct sockaddr_unsized *)&addr,
sizeof(addr));
} }

View File

@ -1680,7 +1680,7 @@ int __mptcp_subflow_connect(struct sock *sk, const struct mptcp_pm_local *local,
sock_hold(ssk); sock_hold(ssk);
list_add_tail(&subflow->node, &msk->conn_list); list_add_tail(&subflow->node, &msk->conn_list);
err = kernel_connect(sf, (struct sockaddr *)&addr, addrlen, O_NONBLOCK); err = kernel_connect(sf, (struct sockaddr_unsized *)&addr, addrlen, O_NONBLOCK);
if (err && err != -EINPROGRESS) { if (err && err != -EINPROGRESS) {
MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_JOINSYNTXCONNECTERR); MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_JOINSYNTXCONNECTERR);
pr_debug("msk=%p local=%d remote=%d connect error: %d\n", pr_debug("msk=%p local=%d remote=%d connect error: %d\n",

View File

@ -1501,7 +1501,7 @@ static int make_send_sock(struct netns_ipvs *ipvs, int id,
} }
get_mcast_sockaddr(&mcast_addr, &salen, &ipvs->mcfg, id); get_mcast_sockaddr(&mcast_addr, &salen, &ipvs->mcfg, id);
result = kernel_connect(sock, (struct sockaddr *)&mcast_addr, result = kernel_connect(sock, (struct sockaddr_unsized *)&mcast_addr,
salen, 0); salen, 0);
if (result < 0) { if (result < 0) {
pr_err("Error connecting to the multicast addr\n"); pr_err("Error connecting to the multicast addr\n");

View File

@ -1054,7 +1054,7 @@ static int netlink_bind(struct socket *sock, struct sockaddr_unsized *addr,
return err; return err;
} }
static int netlink_connect(struct socket *sock, struct sockaddr *addr, static int netlink_connect(struct socket *sock, struct sockaddr_unsized *addr,
int alen, int flags) int alen, int flags)
{ {
int err = 0; int err = 0;

View File

@ -632,8 +632,8 @@ static int nr_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr
return 0; return 0;
} }
static int nr_connect(struct socket *sock, struct sockaddr *uaddr, static int nr_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags) int addr_len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
struct nr_sock *nr = nr_sk(sk); struct nr_sock *nr = nr_sk(sk);

View File

@ -648,7 +648,7 @@ static int llcp_sock_release(struct socket *sock)
return err; return err;
} }
static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr, static int llcp_sock_connect(struct socket *sock, struct sockaddr_unsized *_addr,
int len, int flags) int len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;

View File

@ -73,7 +73,7 @@ static int rawsock_release(struct socket *sock)
return 0; return 0;
} }
static int rawsock_connect(struct socket *sock, struct sockaddr *_addr, static int rawsock_connect(struct socket *sock, struct sockaddr_unsized *_addr,
int len, int flags) int len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;

View File

@ -214,8 +214,8 @@ static int pn_socket_autobind(struct socket *sock)
return 0; /* socket was already bound */ return 0; /* socket was already bound */
} }
static int pn_socket_connect(struct socket *sock, struct sockaddr *addr, static int pn_socket_connect(struct socket *sock, struct sockaddr_unsized *addr,
int len, int flags) int len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
struct pn_sock *pn = pn_sk(sk); struct pn_sock *pn = pn_sk(sk);
@ -252,7 +252,7 @@ static int pn_socket_connect(struct socket *sock, struct sockaddr *addr,
pn->resource = pn_sockaddr_get_resource(spn); pn->resource = pn_sockaddr_get_resource(spn);
sock->state = SS_CONNECTING; sock->state = SS_CONNECTING;
err = sk->sk_prot->connect(sk, addr, len); err = sk->sk_prot->connect(sk, (struct sockaddr *)addr, len);
if (err) { if (err) {
sock->state = SS_UNCONNECTED; sock->state = SS_UNCONNECTED;
pn->dobject = 0; pn->dobject = 0;

View File

@ -1084,7 +1084,7 @@ static int qrtr_recvmsg(struct socket *sock, struct msghdr *msg,
return rc; return rc;
} }
static int qrtr_connect(struct socket *sock, struct sockaddr *saddr, static int qrtr_connect(struct socket *sock, struct sockaddr_unsized *saddr,
int len, int flags) int len, int flags)
{ {
DECLARE_SOCKADDR(struct sockaddr_qrtr *, addr, saddr); DECLARE_SOCKADDR(struct sockaddr_qrtr *, addr, saddr);

View File

@ -533,7 +533,7 @@ static int rds_getsockopt(struct socket *sock, int level, int optname,
} }
static int rds_connect(struct socket *sock, struct sockaddr *uaddr, static int rds_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags) int addr_len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;

View File

@ -173,7 +173,7 @@ int rds_tcp_conn_path_connect(struct rds_conn_path *cp)
* own the socket * own the socket
*/ */
rds_tcp_set_callbacks(sock, cp); rds_tcp_set_callbacks(sock, cp);
ret = kernel_connect(sock, addr, addrlen, O_NONBLOCK); ret = kernel_connect(sock, (struct sockaddr_unsized *)addr, addrlen, O_NONBLOCK);
rdsdebug("connect to address %pI6c returned %d\n", &conn->c_faddr, ret); rdsdebug("connect to address %pI6c returned %d\n", &conn->c_faddr, ret);
if (ret == -EINPROGRESS) if (ret == -EINPROGRESS)

View File

@ -765,7 +765,8 @@ static int rose_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int ad
return err; return err;
} }
static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int addr_len, int flags) static int rose_connect(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len,
int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
struct rose_sock *rose = rose_sk(sk); struct rose_sock *rose = rose_sk(sk);

View File

@ -481,7 +481,7 @@ EXPORT_SYMBOL(rxrpc_kernel_set_notifications);
* - this just targets it at a specific destination; no actual connection * - this just targets it at a specific destination; no actual connection
* negotiation takes place * negotiation takes place
*/ */
static int rxrpc_connect(struct socket *sock, struct sockaddr *addr, static int rxrpc_connect(struct socket *sock, struct sockaddr_unsized *addr,
int addr_len, int flags) int addr_len, int flags)
{ {
struct sockaddr_rxrpc *srx = (struct sockaddr_rxrpc *)addr; struct sockaddr_rxrpc *srx = (struct sockaddr_rxrpc *)addr;

View File

@ -4820,7 +4820,7 @@ static int sctp_connect(struct sock *sk, struct sockaddr *addr,
return err; return err;
} }
int sctp_inet_connect(struct socket *sock, struct sockaddr *uaddr, int sctp_inet_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags) int addr_len, int flags)
{ {
if (addr_len < sizeof(uaddr->sa_family)) if (addr_len < sizeof(uaddr->sa_family))
@ -4829,7 +4829,7 @@ int sctp_inet_connect(struct socket *sock, struct sockaddr *uaddr,
if (uaddr->sa_family == AF_UNSPEC) if (uaddr->sa_family == AF_UNSPEC)
return -EOPNOTSUPP; return -EOPNOTSUPP;
return sctp_connect(sock->sk, uaddr, addr_len, flags); return sctp_connect(sock->sk, (struct sockaddr *)uaddr, addr_len, flags);
} }
/* Only called when shutdown a listening SCTP socket. */ /* Only called when shutdown a listening SCTP socket. */

View File

@ -1642,7 +1642,7 @@ static void smc_connect_work(struct work_struct *work)
release_sock(&smc->sk); release_sock(&smc->sk);
} }
int smc_connect(struct socket *sock, struct sockaddr *addr, int smc_connect(struct socket *sock, struct sockaddr_unsized *addr,
int alen, int flags) int alen, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;
@ -1694,7 +1694,7 @@ int smc_connect(struct socket *sock, struct sockaddr *addr,
rc = -EALREADY; rc = -EALREADY;
goto out; goto out;
} }
rc = kernel_connect(smc->clcsock, addr, alen, flags); rc = kernel_connect(smc->clcsock, (struct sockaddr_unsized *)addr, alen, flags);
if (rc && rc != -EINPROGRESS) if (rc && rc != -EINPROGRESS)
goto out; goto out;

View File

@ -44,7 +44,7 @@ void smc_release_cb(struct sock *sk);
int smc_release(struct socket *sock); int smc_release(struct socket *sock);
int smc_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int smc_bind(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len); int addr_len);
int smc_connect(struct socket *sock, struct sockaddr *addr, int smc_connect(struct socket *sock, struct sockaddr_unsized *addr,
int alen, int flags); int alen, int flags);
int smc_accept(struct socket *sock, struct socket *new_sock, int smc_accept(struct socket *sock, struct socket *new_sock,
struct proto_accept_arg *arg); struct proto_accept_arg *arg);

View File

@ -2099,8 +2099,8 @@ int __sys_connect_file(struct file *file, struct sockaddr_storage *address,
if (err) if (err)
goto out; goto out;
err = READ_ONCE(sock->ops)->connect(sock, (struct sockaddr *)address, err = READ_ONCE(sock->ops)->connect(sock, (struct sockaddr_unsized *)address,
addrlen, sock->file->f_flags | file_flags); addrlen, sock->file->f_flags | file_flags);
out: out:
return err; return err;
} }
@ -3662,14 +3662,14 @@ EXPORT_SYMBOL(kernel_accept);
* Returns 0 or an error code. * Returns 0 or an error code.
*/ */
int kernel_connect(struct socket *sock, struct sockaddr *addr, int addrlen, int kernel_connect(struct socket *sock, struct sockaddr_unsized *addr, int addrlen,
int flags) int flags)
{ {
struct sockaddr_storage address; struct sockaddr_storage address;
memcpy(&address, addr, addrlen); memcpy(&address, addr, addrlen);
return READ_ONCE(sock->ops)->connect(sock, (struct sockaddr *)&address, return READ_ONCE(sock->ops)->connect(sock, (struct sockaddr_unsized *)&address,
addrlen, flags); addrlen, flags);
} }
EXPORT_SYMBOL(kernel_connect); EXPORT_SYMBOL(kernel_connect);

View File

@ -1474,7 +1474,7 @@ static int rpc_sockname(struct net *net, struct sockaddr *sap, size_t salen,
goto out_release; goto out_release;
} }
err = kernel_connect(sock, sap, salen, 0); err = kernel_connect(sock, (struct sockaddr_unsized *)sap, salen, 0);
if (err < 0) { if (err < 0) {
dprintk("RPC: can't connect UDP socket (%d)\n", err); dprintk("RPC: can't connect UDP socket (%d)\n", err);
goto out_release; goto out_release;

View File

@ -2005,7 +2005,7 @@ static int xs_local_finish_connecting(struct rpc_xprt *xprt,
xs_stream_start_connect(transport); xs_stream_start_connect(transport);
return kernel_connect(sock, xs_addr(xprt), xprt->addrlen, 0); return kernel_connect(sock, (struct sockaddr_unsized *)xs_addr(xprt), xprt->addrlen, 0);
} }
/** /**
@ -2405,7 +2405,8 @@ static int xs_tcp_finish_connecting(struct rpc_xprt *xprt, struct socket *sock)
/* Tell the socket layer to start connecting... */ /* Tell the socket layer to start connecting... */
set_bit(XPRT_SOCK_CONNECTING, &transport->sock_state); set_bit(XPRT_SOCK_CONNECTING, &transport->sock_state);
return kernel_connect(sock, xs_addr(xprt), xprt->addrlen, O_NONBLOCK); return kernel_connect(sock, (struct sockaddr_unsized *)xs_addr(xprt),
xprt->addrlen, O_NONBLOCK);
} }
/** /**

View File

@ -2565,7 +2565,7 @@ static bool tipc_sockaddr_is_sane(struct sockaddr_tipc *addr)
* *
* Return: 0 on success, errno otherwise * Return: 0 on success, errno otherwise
*/ */
static int tipc_connect(struct socket *sock, struct sockaddr *dest, static int tipc_connect(struct socket *sock, struct sockaddr_unsized *dest,
int destlen, int flags) int destlen, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;

View File

@ -844,7 +844,7 @@ static int unix_listen(struct socket *sock, int backlog)
static int unix_release(struct socket *); static int unix_release(struct socket *);
static int unix_bind(struct socket *, struct sockaddr_unsized *, int); static int unix_bind(struct socket *, struct sockaddr_unsized *, int);
static int unix_stream_connect(struct socket *, struct sockaddr *, static int unix_stream_connect(struct socket *, struct sockaddr_unsized *,
int addr_len, int flags); int addr_len, int flags);
static int unix_socketpair(struct socket *, struct socket *); static int unix_socketpair(struct socket *, struct socket *);
static int unix_accept(struct socket *, struct socket *, struct proto_accept_arg *arg); static int unix_accept(struct socket *, struct socket *, struct proto_accept_arg *arg);
@ -866,7 +866,7 @@ static int unix_dgram_sendmsg(struct socket *, struct msghdr *, size_t);
static int unix_dgram_recvmsg(struct socket *, struct msghdr *, size_t, int); static int unix_dgram_recvmsg(struct socket *, struct msghdr *, size_t, int);
static int unix_read_skb(struct sock *sk, skb_read_actor_t recv_actor); static int unix_read_skb(struct sock *sk, skb_read_actor_t recv_actor);
static int unix_stream_read_skb(struct sock *sk, skb_read_actor_t recv_actor); static int unix_stream_read_skb(struct sock *sk, skb_read_actor_t recv_actor);
static int unix_dgram_connect(struct socket *, struct sockaddr *, static int unix_dgram_connect(struct socket *, struct sockaddr_unsized *,
int, int); int, int);
static int unix_seqpacket_sendmsg(struct socket *, struct msghdr *, size_t); static int unix_seqpacket_sendmsg(struct socket *, struct msghdr *, size_t);
static int unix_seqpacket_recvmsg(struct socket *, struct msghdr *, size_t, static int unix_seqpacket_recvmsg(struct socket *, struct msghdr *, size_t,
@ -1512,7 +1512,7 @@ static void unix_state_double_unlock(struct sock *sk1, struct sock *sk2)
unix_state_unlock(sk2); unix_state_unlock(sk2);
} }
static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr, static int unix_dgram_connect(struct socket *sock, struct sockaddr_unsized *addr,
int alen, int flags) int alen, int flags)
{ {
struct sockaddr_un *sunaddr = (struct sockaddr_un *)addr; struct sockaddr_un *sunaddr = (struct sockaddr_un *)addr;
@ -1631,7 +1631,7 @@ static long unix_wait_for_peer(struct sock *other, long timeo)
return timeo; return timeo;
} }
static int unix_stream_connect(struct socket *sock, struct sockaddr *uaddr, static int unix_stream_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags) int addr_len, int flags)
{ {
struct sockaddr_un *sunaddr = (struct sockaddr_un *)uaddr; struct sockaddr_un *sunaddr = (struct sockaddr_un *)uaddr;

View File

@ -995,7 +995,7 @@ vsock_bind(struct socket *sock, struct sockaddr_unsized *addr, int addr_len)
sk = sock->sk; sk = sock->sk;
if (vsock_addr_cast((struct sockaddr *)addr, addr_len, &vm_addr) != 0) if (vsock_addr_cast(addr, addr_len, &vm_addr) != 0)
return -EINVAL; return -EINVAL;
lock_sock(sk); lock_sock(sk);
@ -1328,7 +1328,7 @@ static int vsock_dgram_sendmsg(struct socket *sock, struct msghdr *msg,
} }
static int vsock_dgram_connect(struct socket *sock, static int vsock_dgram_connect(struct socket *sock,
struct sockaddr *addr, int addr_len, int flags) struct sockaddr_unsized *addr, int addr_len, int flags)
{ {
int err; int err;
struct sock *sk; struct sock *sk;
@ -1528,7 +1528,7 @@ static void vsock_connect_timeout(struct work_struct *work)
sock_put(sk); sock_put(sk);
} }
static int vsock_connect(struct socket *sock, struct sockaddr *addr, static int vsock_connect(struct socket *sock, struct sockaddr_unsized *addr,
int addr_len, int flags) int addr_len, int flags)
{ {
int err; int err;

View File

@ -57,7 +57,7 @@ bool vsock_addr_equals_addr(const struct sockaddr_vm *addr,
} }
EXPORT_SYMBOL_GPL(vsock_addr_equals_addr); EXPORT_SYMBOL_GPL(vsock_addr_equals_addr);
int vsock_addr_cast(const struct sockaddr *addr, int vsock_addr_cast(const struct sockaddr_unsized *addr,
size_t len, struct sockaddr_vm **out_addr) size_t len, struct sockaddr_vm **out_addr)
{ {
if (len < sizeof(**out_addr)) if (len < sizeof(**out_addr))

View File

@ -743,7 +743,7 @@ static int x25_wait_for_connection_establishment(struct sock *sk)
return rc; return rc;
} }
static int x25_connect(struct socket *sock, struct sockaddr *uaddr, static int x25_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
int addr_len, int flags) int addr_len, int flags)
{ {
struct sock *sk = sock->sk; struct sock *sk = sock->sk;

View File

@ -468,7 +468,7 @@ static int qmi_sample_probe(struct platform_device *pdev)
return ret; return ret;
sq = dev_get_platdata(&pdev->dev); sq = dev_get_platdata(&pdev->dev);
ret = kernel_connect(sample->qmi.sock, (struct sockaddr *)sq, ret = kernel_connect(sample->qmi.sock, (struct sockaddr_unsized *)sq,
sizeof(*sq), 0); sizeof(*sq), 0);
if (ret < 0) { if (ret < 0) {
pr_err("failed to connect to remote service port\n"); pr_err("failed to connect to remote service port\n");

View File

@ -900,7 +900,7 @@ __bpf_kfunc int bpf_kfunc_call_kernel_connect(struct addr_args *args)
goto out; goto out;
} }
err = kernel_connect(sock, (struct sockaddr *)&args->addr, err = kernel_connect(sock, (struct sockaddr_unsized *)&args->addr,
args->addrlen, 0); args->addrlen, 0);
out: out:
mutex_unlock(&sock_lock); mutex_unlock(&sock_lock);