From nobody Sat Feb 7 21:17:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AA8212D248E; Wed, 29 Oct 2025 21:44:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761774268; cv=none; b=F9sicrz1v8F8Q0n7FrWh5UC1d+t2fZQMXK4c9XEveJqeGOZ5aQjq96PbNGFKUJkmgj1mu5dvWYoTOlZzzJ7Ym7vZxLER9wVFFB09ELlfQW1F2qPFQrpRH+VnKt/3TVjwNGa7ZKcowDTI0onqM3+MClQ8MM9mYji7jXcmM5iaN/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761774268; c=relaxed/simple; bh=qoX3Eeuxt2UgUeV5iTriLfkqHYq/RkMUXV28L5qWEqE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=cPAQF+DeLeckkYrY6fwwJd2lO4+1OaKkGwCd5i2ECGKRINab69jCxsbJ3XZ2api0VHNBEW+MSAumRzj5/Bpg1N4Rl1pTOQW6INOukdMCtolxOMGe3ftnLp7R837kf1YUI/qtXogflcaqP1RF4ATWGVwmy8kh24raeODMhWXtRRA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=j+C4Ubba; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="j+C4Ubba" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5533FC4CEFB; Wed, 29 Oct 2025 21:44:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761774268; bh=qoX3Eeuxt2UgUeV5iTriLfkqHYq/RkMUXV28L5qWEqE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j+C4UbbapGP1RUI8Cp09gyz5qjxVmXpf7O1wHa5ZkCtgO1fPZ2YgY2LsruAIdoS6T KBMUKbJhxVWswY/YmZ0nurGmU8pzSIhkTIu/UUF0TTSalkkL5DokOLEBNEPIS14NuT XZ05OsaLNoZ+zyzS6swO86PbVjydjkV+4yZFS2Hve5tzMgK8Zh7gPnJt9QtV9qQ3pq RkTH83Ch0iUQBr6OC6YCd4J/pYr+pzYDBiUZiAjhARCOc/A+55lLVDmIMo6f4rQXNk X2eI9mL1rNpmIplZEvdtR/ebdKjiEK+LdK/K60OZfm+DU+jaAp1+Hokj0jztNfSW0v 7WE9oPYYtk1+g== From: Kees Cook To: Paolo Abeni Cc: Kees Cook , Jakub Kicinski , "Gustavo A. R. Silva" , Alexei Starovoitov , Daniel Borkmann , John Fastabend , "David S. Miller" , Eric Dumazet , Simon Horman , Kuniyuki Iwashima , Willem de Bruijn , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [net-next PATCH v4 1/7] net: Convert proto_ops bind() callbacks to use sockaddr_unsized Date: Wed, 29 Oct 2025 14:43:58 -0700 Message-Id: <20251029214428.2467496-1-kees@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251029214355.work.602-kees@kernel.org> References: <20251029214355.work.602-kees@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=54916; i=kees@kernel.org; h=from:subject; bh=qoX3Eeuxt2UgUeV5iTriLfkqHYq/RkMUXV28L5qWEqE=; b=owGbwMvMwCVmps19z/KJym7G02pJDJlMXQtv+x/xEnvfd3l6xPVlVZqzbhnPElZ4sfI/z8KKT cvbBWWNO0pZGMS4GGTFFFmC7NzjXDzetoe7z1WEmcPKBDKEgYtTACaiq8bIcKHIX/GdDEOl4cpN EllSzSw2dxQYD3vuVN/+qVXdc6/6XYb/hZf2yX87dPB+hEJnVdOTOQVcwvLyStw3/5t8+dl4MzS LAwA= X-Developer-Key: i=kees@kernel.org; a=openpgp; fpr=A5C3F68F229DD60F723E6E138972F4DFDC6DC026 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update all struct proto_ops bind() 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 --- include/linux/net.h | 4 ++-- include/net/inet_common.h | 2 +- include/net/ipv6.h | 2 +- include/net/sock.h | 2 +- net/rds/rds.h | 2 +- net/smc/smc.h | 2 +- crypto/af_alg.c | 2 +- drivers/block/drbd/drbd_receiver.c | 4 ++-- drivers/infiniband/hw/erdma/erdma_cm.c | 4 ++-- drivers/infiniband/sw/siw/siw_cm.c | 6 +++--- drivers/isdn/mISDN/l1oip_core.c | 2 +- drivers/isdn/mISDN/socket.c | 4 ++-- drivers/net/ppp/pptp.c | 4 ++-- drivers/nvme/host/tcp.c | 2 +- drivers/nvme/target/tcp.c | 2 +- drivers/target/iscsi/iscsi_target_login.c | 2 +- drivers/xen/pvcalls-back.c | 2 +- fs/afs/rxrpc.c | 6 +++--- fs/dlm/lowcomms.c | 6 +++--- fs/ocfs2/cluster/tcp.c | 4 ++-- fs/smb/client/connect.c | 2 +- fs/smb/server/transport_tcp.c | 4 ++-- net/9p/trans_fd.c | 2 +- net/appletalk/ddp.c | 2 +- net/atm/pvc.c | 4 ++-- net/atm/svc.c | 2 +- net/ax25/af_ax25.c | 2 +- net/bluetooth/hci_sock.c | 2 +- net/bluetooth/iso.c | 4 ++-- net/bluetooth/l2cap_sock.c | 2 +- net/bluetooth/rfcomm/core.c | 4 ++-- net/bluetooth/rfcomm/sock.c | 2 +- net/bluetooth/sco.c | 2 +- net/can/isotp.c | 2 +- net/can/j1939/socket.c | 2 +- net/can/raw.c | 2 +- net/core/sock.c | 2 +- net/ieee802154/socket.c | 4 ++-- net/ipv4/af_inet.c | 4 ++-- net/ipv4/udp_tunnel_core.c | 2 +- net/ipv6/af_inet6.c | 4 ++-- net/ipv6/ip6_udp_tunnel.c | 2 +- net/iucv/af_iucv.c | 2 +- net/l2tp/l2tp_core.c | 4 ++-- net/llc/af_llc.c | 2 +- net/mctp/af_mctp.c | 2 +- net/mctp/test/route-test.c | 2 +- net/mptcp/protocol.c | 6 +++--- net/mptcp/subflow.c | 2 +- net/netfilter/ipvs/ip_vs_sync.c | 4 ++-- net/netlink/af_netlink.c | 2 +- net/netrom/af_netrom.c | 2 +- net/nfc/llcp_sock.c | 4 ++-- net/packet/af_packet.c | 11 ++++++----- net/phonet/socket.c | 8 ++++---- net/qrtr/af_qrtr.c | 2 +- net/qrtr/ns.c | 2 +- net/rds/bind.c | 2 +- net/rds/tcp_connect.c | 2 +- net/rds/tcp_listen.c | 2 +- net/rose/af_rose.c | 2 +- net/rxrpc/af_rxrpc.c | 2 +- net/rxrpc/rxperf.c | 2 +- net/smc/af_smc.c | 2 +- net/socket.c | 6 +++--- net/sunrpc/clnt.c | 4 ++-- net/sunrpc/svcsock.c | 2 +- net/sunrpc/xprtsock.c | 4 ++-- net/tipc/socket.c | 4 ++-- net/unix/af_unix.c | 4 ++-- net/vmw_vsock/af_vsock.c | 4 ++-- net/x25/af_x25.c | 2 +- net/xdp/xsk.c | 2 +- tools/testing/selftests/bpf/test_kmods/bpf_testmod.c | 2 +- 74 files changed, 113 insertions(+), 112 deletions(-) diff --git a/include/linux/net.h b/include/linux/net.h index ec09620f40f7..0e316f063113 100644 --- a/include/linux/net.h +++ b/include/linux/net.h @@ -163,7 +163,7 @@ struct proto_ops { struct module *owner; int (*release) (struct socket *sock); int (*bind) (struct socket *sock, - struct sockaddr *myaddr, + struct sockaddr_unsized *myaddr, int sockaddr_len); int (*connect) (struct socket *sock, struct sockaddr *vaddr, @@ -345,7 +345,7 @@ int kernel_sendmsg(struct socket *sock, struct msghdr *= msg, struct kvec *vec, int kernel_recvmsg(struct socket *sock, struct msghdr *msg, struct kvec *v= ec, size_t num, size_t len, int flags); =20 -int kernel_bind(struct socket *sock, struct sockaddr *addr, int addrlen); +int kernel_bind(struct socket *sock, struct sockaddr_unsized *addr, int ad= drlen); int kernel_listen(struct socket *sock, int backlog); int kernel_accept(struct socket *sock, struct socket **newsock, int flags); int kernel_connect(struct socket *sock, struct sockaddr *addr, int addrlen, diff --git a/include/net/inet_common.h b/include/net/inet_common.h index c17a6585d0b0..1666cf6f539e 100644 --- a/include/net/inet_common.h +++ b/include/net/inet_common.h @@ -42,7 +42,7 @@ int inet_shutdown(struct socket *sock, int how); 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 *uaddr, int addr_len); +int inet_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int add= r_len); int inet_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len); /* Don't allocate port at this moment, defer to connect. */ #define BIND_FORCE_ADDRESS_NO_PORT (1 << 0) diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 2ccdf85f34f1..2188bad9a687 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h @@ -1208,7 +1208,7 @@ void ipv6_local_rxpmtu(struct sock *sk, struct flowi6= *fl6, u32 mtu); 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 *uaddr, int addr_len); +int inet6_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int ad= dr_len); int inet6_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len); int inet6_getname(struct socket *sock, struct sockaddr *uaddr, int peer); diff --git a/include/net/sock.h b/include/net/sock.h index 60bcb13f045c..3e0618514ce4 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -1901,7 +1901,7 @@ int sock_cmsg_send(struct sock *sk, struct msghdr *ms= g, * Functions to fill in entries in struct proto_ops when a protocol * does not implement a particular function. */ -int sock_no_bind(struct socket *, struct sockaddr *, int); +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_socketpair(struct socket *, struct socket *); int sock_no_accept(struct socket *, struct socket *, struct proto_accept_a= rg *); diff --git a/net/rds/rds.h b/net/rds/rds.h index 5b1c072e2e7f..a029e5fcdea7 100644 --- a/net/rds/rds.h +++ b/net/rds/rds.h @@ -735,7 +735,7 @@ extern wait_queue_head_t rds_poll_waitq; =20 =20 /* bind.c */ -int rds_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len); +int rds_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr= _len); void rds_remove_bound(struct rds_sock *rs); struct rds_sock *rds_find_bound(const struct in6_addr *addr, __be16 port, __u32 scope_id); diff --git a/net/smc/smc.h b/net/smc/smc.h index 2c9084963739..a008dbe6d6f6 100644 --- a/net/smc/smc.h +++ b/net/smc/smc.h @@ -42,7 +42,7 @@ void smc_unhash_sk(struct sock *sk); void smc_release_cb(struct sock *sk); =20 int smc_release(struct socket *sock); -int smc_bind(struct socket *sock, struct sockaddr *uaddr, +int smc_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len); int smc_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags); diff --git a/crypto/af_alg.c b/crypto/af_alg.c index ca6fdcc6c54a..5e760ab62618 100644 --- a/crypto/af_alg.c +++ b/crypto/af_alg.c @@ -145,7 +145,7 @@ void af_alg_release_parent(struct sock *sk) } EXPORT_SYMBOL_GPL(af_alg_release_parent); =20 -static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_= len) +static int alg_bind(struct socket *sock, struct sockaddr_unsized *uaddr, i= nt addr_len) { const u32 allowed =3D CRYPTO_ALG_KERN_DRIVER_ONLY; struct sock *sk =3D sock->sk; diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_r= eceiver.c index caaf2781136d..d9296f74f902 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -450,7 +450,7 @@ static struct socket *drbd_try_connect(struct drbd_conn= ection *connection) * a free one dynamically. */ what =3D "bind before connect"; - err =3D sock->ops->bind(sock, (struct sockaddr *) &src_in6, my_addr_len); + err =3D sock->ops->bind(sock, (struct sockaddr_unsized *) &src_in6, my_ad= dr_len); if (err < 0) goto out; =20 @@ -537,7 +537,7 @@ static int prepare_listen_socket(struct drbd_connection= *connection, struct acce drbd_setbufsize(s_listen, sndbuf_size, rcvbuf_size); =20 what =3D "bind before listen"; - err =3D s_listen->ops->bind(s_listen, (struct sockaddr *)&my_addr, my_add= r_len); + err =3D s_listen->ops->bind(s_listen, (struct sockaddr_unsized *)&my_addr= , my_addr_len); if (err < 0) goto out; =20 diff --git a/drivers/infiniband/hw/erdma/erdma_cm.c b/drivers/infiniband/hw= /erdma/erdma_cm.c index e0acc185e719..ef66a6359eb9 100644 --- a/drivers/infiniband/hw/erdma/erdma_cm.c +++ b/drivers/infiniband/hw/erdma/erdma_cm.c @@ -993,7 +993,7 @@ static int kernel_bindconnect(struct socket *s, struct = sockaddr *laddr, int ret; =20 sock_set_reuseaddr(s->sk); - ret =3D s->ops->bind(s, laddr, laddrlen); + ret =3D s->ops->bind(s, (struct sockaddr_unsized *)laddr, laddrlen); if (ret) return ret; ret =3D s->ops->connect(s, raddr, raddrlen, flags); @@ -1315,7 +1315,7 @@ int erdma_create_listen(struct iw_cm_id *id, int back= log) if (ipv4_is_zeronet(laddr->sin_addr.s_addr)) s->sk->sk_bound_dev_if =3D dev->netdev->ifindex; =20 - ret =3D s->ops->bind(s, (struct sockaddr *)laddr, + ret =3D s->ops->bind(s, (struct sockaddr_unsized *)laddr, sizeof(struct sockaddr_in)); if (ret) goto error; diff --git a/drivers/infiniband/sw/siw/siw_cm.c b/drivers/infiniband/sw/siw= /siw_cm.c index 708b13993fdf..7fe118cacb3f 100644 --- a/drivers/infiniband/sw/siw/siw_cm.c +++ b/drivers/infiniband/sw/siw/siw_cm.c @@ -1340,7 +1340,7 @@ static int kernel_bindconnect(struct socket *s, struc= t sockaddr *laddr, return rv; } =20 - rv =3D s->ops->bind(s, laddr, size); + rv =3D s->ops->bind(s, (struct sockaddr_unsized *)laddr, size); if (rv < 0) return rv; =20 @@ -1789,7 +1789,7 @@ int siw_create_listen(struct iw_cm_id *id, int backlo= g) goto error; } } - rv =3D s->ops->bind(s, (struct sockaddr *)laddr, + rv =3D s->ops->bind(s, (struct sockaddr_unsized *)laddr, sizeof(struct sockaddr_in)); } else { struct sockaddr_in6 *laddr =3D &to_sockaddr_in6(id->local_addr); @@ -1813,7 +1813,7 @@ int siw_create_listen(struct iw_cm_id *id, int backlo= g) goto error; } } - rv =3D s->ops->bind(s, (struct sockaddr *)laddr, + rv =3D s->ops->bind(s, (struct sockaddr_unsized *)laddr, sizeof(struct sockaddr_in6)); } if (rv) { diff --git a/drivers/isdn/mISDN/l1oip_core.c b/drivers/isdn/mISDN/l1oip_cor= e.c index f732f6614d37..6ab036e4a35f 100644 --- a/drivers/isdn/mISDN/l1oip_core.c +++ b/drivers/isdn/mISDN/l1oip_core.c @@ -676,7 +676,7 @@ l1oip_socket_thread(void *data) hc->sin_remote.sin_port =3D htons((unsigned short)hc->remoteport); =20 /* bind to incoming port */ - if (socket->ops->bind(socket, (struct sockaddr *)&hc->sin_local, + if (socket->ops->bind(socket, (struct sockaddr_unsized *)&hc->sin_local, sizeof(hc->sin_local))) { printk(KERN_ERR "%s: Failed to bind socket to port %d.\n", __func__, hc->localport); diff --git a/drivers/isdn/mISDN/socket.c b/drivers/isdn/mISDN/socket.c index b215b28cad7b..77b900db1cac 100644 --- a/drivers/isdn/mISDN/socket.c +++ b/drivers/isdn/mISDN/socket.c @@ -462,7 +462,7 @@ static int data_sock_getsockopt(struct socket *sock, in= t level, int optname, } =20 static int -data_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len) +data_sock_bind(struct socket *sock, struct sockaddr_unsized *addr, int add= r_len) { struct sockaddr_mISDN *maddr =3D (struct sockaddr_mISDN *) addr; struct sock *sk =3D sock->sk; @@ -696,7 +696,7 @@ base_sock_ioctl(struct socket *sock, unsigned int cmd, = unsigned long arg) } =20 static int -base_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len) +base_sock_bind(struct socket *sock, struct sockaddr_unsized *addr, int add= r_len) { struct sockaddr_mISDN *maddr =3D (struct sockaddr_mISDN *) addr; struct sock *sk =3D sock->sk; diff --git a/drivers/net/ppp/pptp.c b/drivers/net/ppp/pptp.c index 90737cb71892..d07e87a0974c 100644 --- a/drivers/net/ppp/pptp.c +++ b/drivers/net/ppp/pptp.c @@ -382,8 +382,8 @@ static int pptp_rcv(struct sk_buff *skb) return NET_RX_DROP; } =20 -static int pptp_bind(struct socket *sock, struct sockaddr *uservaddr, - int sockaddr_len) +static int pptp_bind(struct socket *sock, struct sockaddr_unsized *uservad= dr, + int sockaddr_len) { struct sock *sk =3D sock->sk; struct sockaddr_pppox *sp =3D (struct sockaddr_pppox *) uservaddr; diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c index 9a96df1a511c..35d0bd91f6fd 100644 --- a/drivers/nvme/host/tcp.c +++ b/drivers/nvme/host/tcp.c @@ -1834,7 +1834,7 @@ static int nvme_tcp_alloc_queue(struct nvme_ctrl *nct= rl, int qid, sk_set_memalloc(queue->sock->sk); =20 if (nctrl->opts->mask & NVMF_OPT_HOST_TRADDR) { - ret =3D kernel_bind(queue->sock, (struct sockaddr *)&ctrl->src_addr, + ret =3D kernel_bind(queue->sock, (struct sockaddr_unsized *)&ctrl->src_a= ddr, sizeof(ctrl->src_addr)); if (ret) { dev_err(nctrl->device, diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c index 470bf37e5a63..d543da09ef8e 100644 --- a/drivers/nvme/target/tcp.c +++ b/drivers/nvme/target/tcp.c @@ -2055,7 +2055,7 @@ static int nvmet_tcp_add_port(struct nvmet_port *npor= t) if (so_priority > 0) sock_set_priority(port->sock->sk, so_priority); =20 - ret =3D kernel_bind(port->sock, (struct sockaddr *)&port->addr, + ret =3D kernel_bind(port->sock, (struct sockaddr_unsized *)&port->addr, sizeof(port->addr)); if (ret) { pr_err("failed to bind port socket %d\n", ret); diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/isc= si/iscsi_target_login.c index c2ac9a99ebbb..53aca059dc16 100644 --- a/drivers/target/iscsi/iscsi_target_login.c +++ b/drivers/target/iscsi/iscsi_target_login.c @@ -822,7 +822,7 @@ int iscsit_setup_np( sock_set_reuseaddr(sock->sk); ip_sock_set_freebind(sock->sk); =20 - ret =3D kernel_bind(sock, (struct sockaddr *)&np->np_sockaddr, len); + ret =3D kernel_bind(sock, (struct sockaddr_unsized *)&np->np_sockaddr, le= n); if (ret < 0) { pr_err("kernel_bind() failed: %d\n", ret); goto fail; diff --git a/drivers/xen/pvcalls-back.c b/drivers/xen/pvcalls-back.c index fd7ed65e0197..da1b516b9cfd 100644 --- a/drivers/xen/pvcalls-back.c +++ b/drivers/xen/pvcalls-back.c @@ -650,7 +650,7 @@ static int pvcalls_back_bind(struct xenbus_device *dev, if (ret < 0) goto out; =20 - ret =3D inet_bind(map->sock, (struct sockaddr *)&req->u.bind.addr, + ret =3D inet_bind(map->sock, (struct sockaddr_unsized *)&req->u.bind.addr, req->u.bind.len); if (ret < 0) goto out; diff --git a/fs/afs/rxrpc.c b/fs/afs/rxrpc.c index c1cadf8fb346..bf0e4ea0aafd 100644 --- a/fs/afs/rxrpc.c +++ b/fs/afs/rxrpc.c @@ -82,16 +82,16 @@ int afs_open_socket(struct afs_net *net) if (ret < 0) pr_err("Couldn't create RxGK CM key: %d\n", ret); =20 - ret =3D kernel_bind(socket, (struct sockaddr *) &srx, sizeof(srx)); + ret =3D kernel_bind(socket, (struct sockaddr_unsized *) &srx, sizeof(srx)= ); if (ret =3D=3D -EADDRINUSE) { srx.transport.sin6.sin6_port =3D 0; - ret =3D kernel_bind(socket, (struct sockaddr *) &srx, sizeof(srx)); + ret =3D kernel_bind(socket, (struct sockaddr_unsized *) &srx, sizeof(srx= )); } if (ret < 0) goto error_2; =20 srx.srx_service =3D YFS_CM_SERVICE; - ret =3D kernel_bind(socket, (struct sockaddr *) &srx, sizeof(srx)); + ret =3D kernel_bind(socket, (struct sockaddr_unsized *) &srx, sizeof(srx)= ); if (ret < 0) goto error_2; =20 diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c index 9a0b6c2b6b01..0500421b6e3b 100644 --- a/fs/dlm/lowcomms.c +++ b/fs/dlm/lowcomms.c @@ -1134,7 +1134,7 @@ static int sctp_bind_addrs(struct socket *sock, __be1= 6 port) make_sockaddr(&localaddr, port, &addr_len); =20 if (!i) - result =3D kernel_bind(sock, addr, addr_len); + result =3D kernel_bind(sock, (struct sockaddr_unsized *)addr, addr_len); else result =3D sock_bind_add(sock->sk, addr, addr_len); =20 @@ -1813,7 +1813,7 @@ static int dlm_tcp_bind(struct socket *sock) memcpy(&src_addr, &dlm_local_addr[0], sizeof(src_addr)); make_sockaddr(&src_addr, 0, &addr_len); =20 - result =3D kernel_bind(sock, (struct sockaddr *)&src_addr, + result =3D kernel_bind(sock, (struct sockaddr_unsized *)&src_addr, addr_len); if (result < 0) { /* This *may* not indicate a critical error */ @@ -1852,7 +1852,7 @@ static int dlm_tcp_listen_bind(struct socket *sock) =20 /* Bind to our port */ make_sockaddr(&dlm_local_addr[0], dlm_config.ci_tcp_port, &addr_len); - return kernel_bind(sock, (struct sockaddr *)&dlm_local_addr[0], + return kernel_bind(sock, (struct sockaddr_unsized *)&dlm_local_addr[0], addr_len); } =20 diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c index b05d4e9d13b2..c7734193d8d7 100644 --- a/fs/ocfs2/cluster/tcp.c +++ b/fs/ocfs2/cluster/tcp.c @@ -1615,7 +1615,7 @@ static void o2net_start_connect(struct work_struct *w= ork) myaddr.sin_addr.s_addr =3D mynode->nd_ipv4_address; myaddr.sin_port =3D htons(0); /* any port */ =20 - ret =3D sock->ops->bind(sock, (struct sockaddr *)&myaddr, + ret =3D sock->ops->bind(sock, (struct sockaddr_unsized *)&myaddr, sizeof(myaddr)); if (ret) { mlog(ML_ERROR, "bind failed with %d at address %pI4\n", @@ -2002,7 +2002,7 @@ static int o2net_open_listening_sock(__be32 addr, __b= e16 port) INIT_WORK(&o2net_listen_work, o2net_accept_many); =20 sock->sk->sk_reuse =3D SK_CAN_REUSE; - ret =3D sock->ops->bind(sock, (struct sockaddr *)&sin, sizeof(sin)); + ret =3D sock->ops->bind(sock, (struct sockaddr_unsized *)&sin, sizeof(sin= )); if (ret < 0) { printk(KERN_ERR "o2net: Error %d while binding socket at " "%pI4:%u\n", ret, &addr, ntohs(port));=20 diff --git a/fs/smb/client/connect.c b/fs/smb/client/connect.c index dd12f3eb61dc..96d972263020 100644 --- a/fs/smb/client/connect.c +++ b/fs/smb/client/connect.c @@ -3112,7 +3112,7 @@ bind_socket(struct TCP_Server_Info *server) struct socket *socket =3D server->ssocket; =20 rc =3D kernel_bind(socket, - (struct sockaddr *) &server->srcaddr, + (struct sockaddr_unsized *) &server->srcaddr, sizeof(server->srcaddr)); if (rc < 0) { struct sockaddr_in *saddr4; diff --git a/fs/smb/server/transport_tcp.c b/fs/smb/server/transport_tcp.c index 7a1e3dcc2cde..bf694bc78c65 100644 --- a/fs/smb/server/transport_tcp.c +++ b/fs/smb/server/transport_tcp.c @@ -519,10 +519,10 @@ static int create_socket(struct interface *iface) } =20 if (ipv4) - ret =3D kernel_bind(ksmbd_socket, (struct sockaddr *)&sin, + ret =3D kernel_bind(ksmbd_socket, (struct sockaddr_unsized *)&sin, sizeof(sin)); else - ret =3D kernel_bind(ksmbd_socket, (struct sockaddr *)&sin6, + ret =3D kernel_bind(ksmbd_socket, (struct sockaddr_unsized *)&sin6, sizeof(sin6)); if (ret) { pr_err("Failed to bind socket: %d\n", ret); diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c index a516745f732f..ef517bb307e2 100644 --- a/net/9p/trans_fd.c +++ b/net/9p/trans_fd.c @@ -966,7 +966,7 @@ static int p9_bind_privport(struct socket *sock) ((struct sockaddr_in *)&stor)->sin_port =3D htons((ushort)port); else ((struct sockaddr_in6 *)&stor)->sin6_port =3D htons((ushort)port); - err =3D kernel_bind(sock, (struct sockaddr *)&stor, sizeof(stor)); + err =3D kernel_bind(sock, (struct sockaddr_unsized *)&stor, sizeof(stor)= ); if (err !=3D -EADDRINUSE) break; } diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c index 30242fe10341..45db43cde67f 100644 --- a/net/appletalk/ddp.c +++ b/net/appletalk/ddp.c @@ -1149,7 +1149,7 @@ static int atalk_autobind(struct sock *sk) } =20 /* Set the address 'our end' of the connection */ -static int atalk_bind(struct socket *sock, struct sockaddr *uaddr, int add= r_len) +static int atalk_bind(struct socket *sock, struct sockaddr_unsized *uaddr,= int addr_len) { struct sockaddr_at *addr =3D (struct sockaddr_at *)uaddr; struct sock *sk =3D sock->sk; diff --git a/net/atm/pvc.c b/net/atm/pvc.c index 66d9a9bd5896..62fdf07c53de 100644 --- a/net/atm/pvc.c +++ b/net/atm/pvc.c @@ -24,7 +24,7 @@ static int pvc_shutdown(struct socket *sock, int how) return 0; } =20 -static int pvc_bind(struct socket *sock, struct sockaddr *sockaddr, +static int pvc_bind(struct socket *sock, struct sockaddr_unsized *sockaddr, int sockaddr_len) { struct sock *sk =3D sock->sk; @@ -59,7 +59,7 @@ static int pvc_bind(struct socket *sock, struct sockaddr = *sockaddr, static int pvc_connect(struct socket *sock, struct sockaddr *sockaddr, int sockaddr_len, int flags) { - return pvc_bind(sock, sockaddr, sockaddr_len); + return pvc_bind(sock, (struct sockaddr_unsized *)sockaddr, sockaddr_len); } =20 static int pvc_setsockopt(struct socket *sock, int level, int optname, diff --git a/net/atm/svc.c b/net/atm/svc.c index f8137ae693b0..1906a493c8aa 100644 --- a/net/atm/svc.c +++ b/net/atm/svc.c @@ -97,7 +97,7 @@ static int svc_release(struct socket *sock) return 0; } =20 -static int svc_bind(struct socket *sock, struct sockaddr *sockaddr, +static int svc_bind(struct socket *sock, struct sockaddr_unsized *sockaddr, int sockaddr_len) { DEFINE_WAIT(wait); diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c index 6ef8b2a57a9b..23c558ff9682 100644 --- a/net/ax25/af_ax25.c +++ b/net/ax25/af_ax25.c @@ -1094,7 +1094,7 @@ static int ax25_release(struct socket *sock) * that we've implemented support for SO_BINDTODEVICE. It is however small * and trivially backward compatible. */ -static int ax25_bind(struct socket *sock, struct sockaddr *uaddr, int addr= _len) +static int ax25_bind(struct socket *sock, struct sockaddr_unsized *uaddr, = int addr_len) { struct sock *sk =3D sock->sk; struct full_sockaddr_ax25 *addr =3D (struct full_sockaddr_ax25 *)uaddr; diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c index fc866759910d..ba9f48771e11 100644 --- a/net/bluetooth/hci_sock.c +++ b/net/bluetooth/hci_sock.c @@ -1185,7 +1185,7 @@ static int hci_sock_compat_ioctl(struct socket *sock,= unsigned int cmd, } #endif =20 -static int hci_sock_bind(struct socket *sock, struct sockaddr *addr, +static int hci_sock_bind(struct socket *sock, struct sockaddr_unsized *add= r, int addr_len) { struct sockaddr_hci haddr; diff --git a/net/bluetooth/iso.c b/net/bluetooth/iso.c index 9b263d061e05..1fda214a815d 100644 --- a/net/bluetooth/iso.c +++ b/net/bluetooth/iso.c @@ -944,7 +944,7 @@ static int iso_sock_create(struct net *net, struct sock= et *sock, int protocol, return 0; } =20 -static int iso_sock_bind_bc(struct socket *sock, struct sockaddr *addr, +static int iso_sock_bind_bc(struct socket *sock, struct sockaddr_unsized *= addr, int addr_len) { struct sockaddr_iso *sa =3D (struct sockaddr_iso *)addr; @@ -1022,7 +1022,7 @@ static int iso_sock_bind_pa_sk(struct sock *sk, struc= t sockaddr_iso *sa, return err; } =20 -static int iso_sock_bind(struct socket *sock, struct sockaddr *addr, +static int iso_sock_bind(struct socket *sock, struct sockaddr_unsized *add= r, int addr_len) { struct sockaddr_iso *sa =3D (struct sockaddr_iso *)addr; diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c index 814fb8610ac4..ca7394d8fa4e 100644 --- a/net/bluetooth/l2cap_sock.c +++ b/net/bluetooth/l2cap_sock.c @@ -80,7 +80,7 @@ static int l2cap_validate_le_psm(u16 psm) return 0; } =20 -static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int= alen) +static int l2cap_sock_bind(struct socket *sock, struct sockaddr_unsized *a= ddr, int alen) { struct sock *sk =3D sock->sk; struct l2cap_chan *chan =3D l2cap_pi(sk)->chan; diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c index 96250807b32b..d62fd6c57617 100644 --- a/net/bluetooth/rfcomm/core.c +++ b/net/bluetooth/rfcomm/core.c @@ -781,7 +781,7 @@ static struct rfcomm_session *rfcomm_session_create(bda= ddr_t *src, addr.l2_psm =3D 0; addr.l2_cid =3D 0; addr.l2_bdaddr_type =3D BDADDR_BREDR; - *err =3D kernel_bind(sock, (struct sockaddr *) &addr, sizeof(addr)); + *err =3D kernel_bind(sock, (struct sockaddr_unsized *)&addr, sizeof(addr)= ); if (*err < 0) goto failed; =20 @@ -2068,7 +2068,7 @@ static int rfcomm_add_listener(bdaddr_t *ba) addr.l2_psm =3D cpu_to_le16(L2CAP_PSM_RFCOMM); addr.l2_cid =3D 0; addr.l2_bdaddr_type =3D BDADDR_BREDR; - err =3D kernel_bind(sock, (struct sockaddr *) &addr, sizeof(addr)); + err =3D kernel_bind(sock, (struct sockaddr_unsized *)&addr, sizeof(addr)); if (err < 0) { BT_ERR("Bind failed %d", err); goto failed; diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c index 913402806fa0..8c8762bbc6de 100644 --- a/net/bluetooth/rfcomm/sock.c +++ b/net/bluetooth/rfcomm/sock.c @@ -324,7 +324,7 @@ static int rfcomm_sock_create(struct net *net, struct s= ocket *sock, return 0; } =20 -static int rfcomm_sock_bind(struct socket *sock, struct sockaddr *addr, in= t addr_len) +static int rfcomm_sock_bind(struct socket *sock, struct sockaddr_unsized *= addr, int addr_len) { struct sockaddr_rc sa; struct sock *sk =3D sock->sk; diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c index ab0cf442d57b..01d878205e58 100644 --- a/net/bluetooth/sco.c +++ b/net/bluetooth/sco.c @@ -605,7 +605,7 @@ static int sco_sock_create(struct net *net, struct sock= et *sock, int protocol, return 0; } =20 -static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, +static int sco_sock_bind(struct socket *sock, struct sockaddr_unsized *add= r, int addr_len) { struct sockaddr_sco *sa =3D (struct sockaddr_sco *) addr; diff --git a/net/can/isotp.c b/net/can/isotp.c index 74ee1e52249b..ce588b85665a 100644 --- a/net/can/isotp.c +++ b/net/can/isotp.c @@ -1246,7 +1246,7 @@ static int isotp_release(struct socket *sock) return 0; } =20 -static int isotp_bind(struct socket *sock, struct sockaddr *uaddr, int len) +static int isotp_bind(struct socket *sock, struct sockaddr_unsized *uaddr,= int len) { struct sockaddr_can *addr =3D (struct sockaddr_can *)uaddr; struct sock *sk =3D sock->sk; diff --git a/net/can/j1939/socket.c b/net/can/j1939/socket.c index 88e7160d4248..a2abedc757d0 100644 --- a/net/can/j1939/socket.c +++ b/net/can/j1939/socket.c @@ -440,7 +440,7 @@ static int j1939_sk_sanity_check(struct sockaddr_can *a= ddr, int len) return 0; } =20 -static int j1939_sk_bind(struct socket *sock, struct sockaddr *uaddr, int = len) +static int j1939_sk_bind(struct socket *sock, struct sockaddr_unsized *uad= dr, int len) { struct sockaddr_can *addr =3D (struct sockaddr_can *)uaddr; struct j1939_sock *jsk =3D j1939_sk(sock->sk); diff --git a/net/can/raw.c b/net/can/raw.c index a53853f5e9af..f36a83d3447c 100644 --- a/net/can/raw.c +++ b/net/can/raw.c @@ -449,7 +449,7 @@ static int raw_release(struct socket *sock) return 0; } =20 -static int raw_bind(struct socket *sock, struct sockaddr *uaddr, int len) +static int raw_bind(struct socket *sock, struct sockaddr_unsized *uaddr, i= nt len) { struct sockaddr_can *addr =3D (struct sockaddr_can *)uaddr; struct sock *sk =3D sock->sk; diff --git a/net/core/sock.c b/net/core/sock.c index dc03d4b5909a..6c8d50338f71 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -3420,7 +3420,7 @@ EXPORT_SYMBOL_GPL(sk_set_peek_off); * function, some default processing is provided. */ =20 -int sock_no_bind(struct socket *sock, struct sockaddr *saddr, int len) +int sock_no_bind(struct socket *sock, struct sockaddr_unsized *saddr, int = len) { return -EOPNOTSUPP; } diff --git a/net/ieee802154/socket.c b/net/ieee802154/socket.c index 18d267921bb5..99ddfad9bb88 100644 --- a/net/ieee802154/socket.c +++ b/net/ieee802154/socket.c @@ -96,13 +96,13 @@ static int ieee802154_sock_sendmsg(struct socket *sock,= struct msghdr *msg, return sk->sk_prot->sendmsg(sk, msg, len); } =20 -static int ieee802154_sock_bind(struct socket *sock, struct sockaddr *uadd= r, +static int ieee802154_sock_bind(struct socket *sock, struct sockaddr_unsiz= ed *uaddr, int addr_len) { struct sock *sk =3D sock->sk; =20 if (sk->sk_prot->bind) - return sk->sk_prot->bind(sk, uaddr, addr_len); + return sk->sk_prot->bind(sk, (struct sockaddr *)uaddr, addr_len); =20 return sock_no_bind(sock, uaddr, addr_len); } diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 3109c5ec38f3..e70126c5ae44 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -464,9 +464,9 @@ int inet_bind_sk(struct sock *sk, struct sockaddr *uadd= r, int addr_len) return __inet_bind(sk, uaddr, addr_len, flags); } =20 -int inet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) +int inet_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int add= r_len) { - return inet_bind_sk(sock->sk, uaddr, addr_len); + return inet_bind_sk(sock->sk, (struct sockaddr *)uaddr, addr_len); } EXPORT_SYMBOL(inet_bind); =20 diff --git a/net/ipv4/udp_tunnel_core.c b/net/ipv4/udp_tunnel_core.c index 54386e06a813..11e5a88c923d 100644 --- a/net/ipv4/udp_tunnel_core.c +++ b/net/ipv4/udp_tunnel_core.c @@ -29,7 +29,7 @@ int udp_sock_create4(struct net *net, struct udp_port_cfg= *cfg, udp_addr.sin_family =3D AF_INET; udp_addr.sin_addr =3D cfg->local_ip; udp_addr.sin_port =3D cfg->local_udp_port; - err =3D kernel_bind(sock, (struct sockaddr *)&udp_addr, + err =3D kernel_bind(sock, (struct sockaddr_unsized *)&udp_addr, sizeof(udp_addr)); if (err < 0) goto error; diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index 1b0314644e0c..0eeb85688b50 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c @@ -465,9 +465,9 @@ int inet6_bind_sk(struct sock *sk, struct sockaddr *uad= dr, int addr_len) } =20 /* bind for INET6 API */ -int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) +int inet6_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int ad= dr_len) { - return inet6_bind_sk(sock->sk, uaddr, addr_len); + return inet6_bind_sk(sock->sk, (struct sockaddr *)uaddr, addr_len); } EXPORT_SYMBOL(inet6_bind); =20 diff --git a/net/ipv6/ip6_udp_tunnel.c b/net/ipv6/ip6_udp_tunnel.c index 0ff547a4bff7..b0d9286b33c8 100644 --- a/net/ipv6/ip6_udp_tunnel.c +++ b/net/ipv6/ip6_udp_tunnel.c @@ -40,7 +40,7 @@ int udp_sock_create6(struct net *net, struct udp_port_cfg= *cfg, memcpy(&udp6_addr.sin6_addr, &cfg->local_ip6, sizeof(udp6_addr.sin6_addr)); udp6_addr.sin6_port =3D cfg->local_udp_port; - err =3D kernel_bind(sock, (struct sockaddr *)&udp6_addr, + err =3D kernel_bind(sock, (struct sockaddr_unsized *)&udp6_addr, sizeof(udp6_addr)); if (err < 0) goto error; diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c index 6c717a7ef292..894c53317e92 100644 --- a/net/iucv/af_iucv.c +++ b/net/iucv/af_iucv.c @@ -562,7 +562,7 @@ static void __iucv_auto_name(struct iucv_sock *iucv) } =20 /* Bind an unbound socket */ -static int iucv_sock_bind(struct socket *sock, struct sockaddr *addr, +static int iucv_sock_bind(struct socket *sock, struct sockaddr_unsized *ad= dr, int addr_len) { DECLARE_SOCKADDR(struct sockaddr_iucv *, sa, addr); diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c index 369a2f2e459c..4b5e372a5cd4 100644 --- a/net/l2tp/l2tp_core.c +++ b/net/l2tp/l2tp_core.c @@ -1503,7 +1503,7 @@ static int l2tp_tunnel_sock_create(struct net *net, memcpy(&ip6_addr.l2tp_addr, cfg->local_ip6, sizeof(ip6_addr.l2tp_addr)); ip6_addr.l2tp_conn_id =3D tunnel_id; - err =3D kernel_bind(sock, (struct sockaddr *)&ip6_addr, + err =3D kernel_bind(sock, (struct sockaddr_unsized *)&ip6_addr, sizeof(ip6_addr)); if (err < 0) goto out; @@ -1530,7 +1530,7 @@ static int l2tp_tunnel_sock_create(struct net *net, ip_addr.l2tp_family =3D AF_INET; ip_addr.l2tp_addr =3D cfg->local_ip; ip_addr.l2tp_conn_id =3D tunnel_id; - err =3D kernel_bind(sock, (struct sockaddr *)&ip_addr, + err =3D kernel_bind(sock, (struct sockaddr_unsized *)&ip_addr, sizeof(ip_addr)); if (err < 0) goto out; diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c index 5958a80fe14c..e5bb0c0d708c 100644 --- a/net/llc/af_llc.c +++ b/net/llc/af_llc.c @@ -337,7 +337,7 @@ static int llc_ui_autobind(struct socket *sock, struct = sockaddr_llc *addr) * otherwise all hell will break loose. * Returns: 0 upon success, negative otherwise. */ -static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int ad= drlen) +static int llc_ui_bind(struct socket *sock, struct sockaddr_unsized *uaddr= , int addrlen) { struct sockaddr_llc *addr =3D (struct sockaddr_llc *)uaddr; struct sock *sk =3D sock->sk; diff --git a/net/mctp/af_mctp.c b/net/mctp/af_mctp.c index b99ba14f39d2..5b1ef50637b7 100644 --- a/net/mctp/af_mctp.c +++ b/net/mctp/af_mctp.c @@ -49,7 +49,7 @@ static bool mctp_sockaddr_ext_is_ok(const struct sockaddr= _mctp_ext *addr) !addr->__smctp_pad0[2]; } =20 -static int mctp_bind(struct socket *sock, struct sockaddr *addr, int addrl= en) +static int mctp_bind(struct socket *sock, struct sockaddr_unsized *addr, i= nt addrlen) { struct sock *sk =3D sock->sk; struct mctp_sock *msk =3D container_of(sk, struct mctp_sock, sk); diff --git a/net/mctp/test/route-test.c b/net/mctp/test/route-test.c index 69a3ccfc6310..be9149ac79dd 100644 --- a/net/mctp/test/route-test.c +++ b/net/mctp/test/route-test.c @@ -205,7 +205,7 @@ static void __mctp_route_test_init(struct kunit *test, addr.smctp_network =3D netid; addr.smctp_addr.s_addr =3D 8; addr.smctp_type =3D 0; - rc =3D kernel_bind(sock, (struct sockaddr *)&addr, sizeof(addr)); + rc =3D kernel_bind(sock, (struct sockaddr_unsized *)&addr, sizeof(addr)); KUNIT_ASSERT_EQ(test, rc, 0); =20 *devp =3D dev; diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 0292162a14ee..beb017e507a0 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3832,7 +3832,7 @@ static struct proto mptcp_prot =3D { .no_autobind =3D true, }; =20 -static int mptcp_bind(struct socket *sock, struct sockaddr *uaddr, int add= r_len) +static int mptcp_bind(struct socket *sock, struct sockaddr_unsized *uaddr,= int addr_len) { struct mptcp_sock *msk =3D mptcp_sk(sock->sk); struct sock *ssk, *sk =3D sock->sk; @@ -3846,10 +3846,10 @@ static int mptcp_bind(struct socket *sock, struct s= ockaddr *uaddr, int addr_len) } =20 if (sk->sk_family =3D=3D AF_INET) - err =3D inet_bind_sk(ssk, uaddr, addr_len); + err =3D inet_bind_sk(ssk, (struct sockaddr *)uaddr, addr_len); #if IS_ENABLED(CONFIG_MPTCP_IPV6) else if (sk->sk_family =3D=3D AF_INET6) - err =3D inet6_bind_sk(ssk, uaddr, addr_len); + err =3D inet6_bind_sk(ssk, (struct sockaddr *)uaddr, addr_len); #endif if (!err) mptcp_copy_inaddrs(sk, ssk); diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index e8325890a322..d90237bf433c 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1660,7 +1660,7 @@ int __mptcp_subflow_connect(struct sock *sk, const st= ruct mptcp_pm_local *local, addrlen =3D sizeof(struct sockaddr_in6); #endif ssk->sk_bound_dev_if =3D local->ifindex; - err =3D kernel_bind(sf, (struct sockaddr *)&addr, addrlen); + err =3D kernel_bind(sf, (struct sockaddr_unsized *)&addr, addrlen); if (err) { MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_JOINSYNTXBINDERR); pr_debug("msk=3D%p local=3D%d remote=3D%d bind error: %d\n", diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_syn= c.c index 3402675bf521..d8c089ef387c 100644 --- a/net/netfilter/ipvs/ip_vs_sync.c +++ b/net/netfilter/ipvs/ip_vs_sync.c @@ -1435,7 +1435,7 @@ static int bind_mcastif_addr(struct socket *sock, str= uct net_device *dev) sin.sin_addr.s_addr =3D addr; sin.sin_port =3D 0; =20 - return kernel_bind(sock, (struct sockaddr *)&sin, sizeof(sin)); + return kernel_bind(sock, (struct sockaddr_unsized *)&sin, sizeof(sin)); } =20 static void get_mcast_sockaddr(union ipvs_sockaddr *sa, int *salen, @@ -1542,7 +1542,7 @@ static int make_receive_sock(struct netns_ipvs *ipvs,= int id, =20 get_mcast_sockaddr(&mcast_addr, &salen, &ipvs->bcfg, id); sock->sk->sk_bound_dev_if =3D dev->ifindex; - result =3D kernel_bind(sock, (struct sockaddr *)&mcast_addr, salen); + result =3D kernel_bind(sock, (struct sockaddr_unsized *)&mcast_addr, sale= n); if (result < 0) { pr_err("Error binding to the multicast addr\n"); goto error; diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 2b46c0cd752a..b4110994776d 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -968,7 +968,7 @@ static void netlink_undo_bind(int group, long unsigned = int groups, nlk->netlink_unbind(sock_net(sk), undo + 1); } =20 -static int netlink_bind(struct socket *sock, struct sockaddr *addr, +static int netlink_bind(struct socket *sock, struct sockaddr_unsized *addr, int addr_len) { struct sock *sk =3D sock->sk; diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index 3331669d8e33..33468124d53d 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c @@ -561,7 +561,7 @@ static int nr_release(struct socket *sock) return 0; } =20 -static int nr_bind(struct socket *sock, struct sockaddr *uaddr, int addr_l= en) +static int nr_bind(struct socket *sock, struct sockaddr_unsized *uaddr, in= t addr_len) { struct sock *sk =3D sock->sk; struct nr_sock *nr =3D nr_sk(sk); diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c index 57a2f97004e1..26e6ceb48a82 100644 --- a/net/nfc/llcp_sock.c +++ b/net/nfc/llcp_sock.c @@ -56,7 +56,7 @@ static struct proto llcp_sock_proto =3D { .obj_size =3D sizeof(struct nfc_llcp_sock), }; =20 -static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int = alen) +static int llcp_sock_bind(struct socket *sock, struct sockaddr_unsized *ad= dr, int alen) { struct sock *sk =3D sock->sk; struct nfc_llcp_sock *llcp_sock =3D nfc_llcp_sock(sk); @@ -146,7 +146,7 @@ static int llcp_sock_bind(struct socket *sock, struct s= ockaddr *addr, int alen) return ret; } =20 -static int llcp_raw_sock_bind(struct socket *sock, struct sockaddr *addr, +static int llcp_raw_sock_bind(struct socket *sock, struct sockaddr_unsized= *addr, int alen) { struct sock *sk =3D sock->sk; diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 173e6edda08f..fccad2a529cc 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -3279,11 +3279,12 @@ static int packet_do_bind(struct sock *sk, const ch= ar *name, int ifindex, * Bind a packet socket to a device */ =20 -static int packet_bind_spkt(struct socket *sock, struct sockaddr *uaddr, +static int packet_bind_spkt(struct socket *sock, struct sockaddr_unsized *= uaddr, int addr_len) { struct sock *sk =3D sock->sk; - char name[sizeof(uaddr->sa_data_min) + 1]; + struct sockaddr *sa =3D (struct sockaddr *)uaddr; + char name[sizeof(sa->sa_data_min) + 1]; =20 /* * Check legality @@ -3294,13 +3295,13 @@ static int packet_bind_spkt(struct socket *sock, st= ruct sockaddr *uaddr, /* uaddr->sa_data comes from the userspace, it's not guaranteed to be * zero-terminated. */ - memcpy(name, uaddr->sa_data, sizeof(uaddr->sa_data_min)); - name[sizeof(uaddr->sa_data_min)] =3D 0; + memcpy(name, sa->sa_data, sizeof(sa->sa_data_min)); + name[sizeof(sa->sa_data_min)] =3D 0; =20 return packet_do_bind(sk, name, 0, 0); } =20 -static int packet_bind(struct socket *sock, struct sockaddr *uaddr, int ad= dr_len) +static int packet_bind(struct socket *sock, struct sockaddr_unsized *uaddr= , int addr_len) { struct sockaddr_ll *sll =3D (struct sockaddr_ll *)uaddr; struct sock *sk =3D sock->sk; diff --git a/net/phonet/socket.c b/net/phonet/socket.c index db2d552e9b32..478b02647733 100644 --- a/net/phonet/socket.c +++ b/net/phonet/socket.c @@ -153,7 +153,7 @@ EXPORT_SYMBOL(pn_sock_unhash); =20 static DEFINE_MUTEX(port_mutex); =20 -static int pn_socket_bind(struct socket *sock, struct sockaddr *addr, int = len) +static int pn_socket_bind(struct socket *sock, struct sockaddr_unsized *ad= dr, int len) { struct sock *sk =3D sock->sk; struct pn_sock *pn =3D pn_sk(sk); @@ -163,7 +163,7 @@ static int pn_socket_bind(struct socket *sock, struct s= ockaddr *addr, int len) u8 saddr; =20 if (sk->sk_prot->bind) - return sk->sk_prot->bind(sk, addr, len); + return sk->sk_prot->bind(sk, (struct sockaddr *)addr, len); =20 if (len < sizeof(struct sockaddr_pn)) return -EINVAL; @@ -206,8 +206,8 @@ static int pn_socket_autobind(struct socket *sock) =20 memset(&sa, 0, sizeof(sa)); sa.spn_family =3D AF_PHONET; - err =3D pn_socket_bind(sock, (struct sockaddr *)&sa, - sizeof(struct sockaddr_pn)); + err =3D pn_socket_bind(sock, (struct sockaddr_unsized *)&sa, + sizeof(struct sockaddr_pn)); if (err !=3D -EINVAL) return err; BUG_ON(!pn_port(pn_sk(sock->sk)->sobject)); diff --git a/net/qrtr/af_qrtr.c b/net/qrtr/af_qrtr.c index 00c51cf693f3..00bd3dd9f0f9 100644 --- a/net/qrtr/af_qrtr.c +++ b/net/qrtr/af_qrtr.c @@ -824,7 +824,7 @@ static int qrtr_autobind(struct socket *sock) } =20 /* Bind socket to specified sockaddr. */ -static int qrtr_bind(struct socket *sock, struct sockaddr *saddr, int len) +static int qrtr_bind(struct socket *sock, struct sockaddr_unsized *saddr, = int len) { DECLARE_SOCKADDR(struct sockaddr_qrtr *, addr, saddr); struct qrtr_sock *ipc =3D qrtr_sk(sock->sk); diff --git a/net/qrtr/ns.c b/net/qrtr/ns.c index 3de9350cbf30..bfcc1a453f23 100644 --- a/net/qrtr/ns.c +++ b/net/qrtr/ns.c @@ -714,7 +714,7 @@ int qrtr_ns_init(void) sq.sq_port =3D QRTR_PORT_CTRL; qrtr_ns.local_node =3D sq.sq_node; =20 - ret =3D kernel_bind(qrtr_ns.sock, (struct sockaddr *)&sq, sizeof(sq)); + ret =3D kernel_bind(qrtr_ns.sock, (struct sockaddr_unsized *)&sq, sizeof(= sq)); if (ret < 0) { pr_err("failed to bind to socket\n"); goto err_wq; diff --git a/net/rds/bind.c b/net/rds/bind.c index 97a29172a8ee..f800d920d969 100644 --- a/net/rds/bind.c +++ b/net/rds/bind.c @@ -160,7 +160,7 @@ void rds_remove_bound(struct rds_sock *rs) rs->rs_bound_addr =3D in6addr_any; } =20 -int rds_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) +int rds_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr= _len) { struct sock *sk =3D sock->sk; struct rds_sock *rs =3D rds_sk_to_rs(sk); diff --git a/net/rds/tcp_connect.c b/net/rds/tcp_connect.c index a0046e99d6df..1eff3b03ab77 100644 --- a/net/rds/tcp_connect.c +++ b/net/rds/tcp_connect.c @@ -145,7 +145,7 @@ int rds_tcp_conn_path_connect(struct rds_conn_path *cp) addrlen =3D sizeof(sin); } =20 - ret =3D kernel_bind(sock, addr, addrlen); + ret =3D kernel_bind(sock, (struct sockaddr_unsized *)addr, addrlen); if (ret) { rdsdebug("bind failed with %d at address %pI6c\n", ret, &conn->c_laddr); diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c index 91e34af3fe5d..820d3e20de19 100644 --- a/net/rds/tcp_listen.c +++ b/net/rds/tcp_listen.c @@ -290,7 +290,7 @@ struct socket *rds_tcp_listen_init(struct net *net, boo= l isv6) addr_len =3D sizeof(*sin); } =20 - ret =3D kernel_bind(sock, (struct sockaddr *)&ss, addr_len); + ret =3D kernel_bind(sock, (struct sockaddr_unsized *)&ss, addr_len); if (ret < 0) { rdsdebug("could not bind %s listener socket: %d\n", isv6 ? "IPv6" : "IPv4", ret); diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c index 543f9e8ebb69..47369eab5aec 100644 --- a/net/rose/af_rose.c +++ b/net/rose/af_rose.c @@ -693,7 +693,7 @@ static int rose_release(struct socket *sock) return 0; } =20 -static int rose_bind(struct socket *sock, struct sockaddr *uaddr, int addr= _len) +static int rose_bind(struct socket *sock, struct sockaddr_unsized *uaddr, = int addr_len) { struct sock *sk =3D sock->sk; struct rose_sock *rose =3D rose_sk(sk); diff --git a/net/rxrpc/af_rxrpc.c b/net/rxrpc/af_rxrpc.c index 36df0274d7b7..245f37a74394 100644 --- a/net/rxrpc/af_rxrpc.c +++ b/net/rxrpc/af_rxrpc.c @@ -127,7 +127,7 @@ static int rxrpc_validate_address(struct rxrpc_sock *rx, /* * bind a local address to an RxRPC socket */ -static int rxrpc_bind(struct socket *sock, struct sockaddr *saddr, int len) +static int rxrpc_bind(struct socket *sock, struct sockaddr_unsized *saddr,= int len) { struct sockaddr_rxrpc *srx =3D (struct sockaddr_rxrpc *)saddr; struct rxrpc_local *local; diff --git a/net/rxrpc/rxperf.c b/net/rxrpc/rxperf.c index 2ea71e3831f7..98ea76fae70f 100644 --- a/net/rxrpc/rxperf.c +++ b/net/rxrpc/rxperf.c @@ -211,7 +211,7 @@ static int rxperf_open_socket(void) =20 ret =3D rxrpc_sock_set_security_keyring(socket->sk, rxperf_sec_keyring); =20 - ret =3D kernel_bind(socket, (struct sockaddr *)&srx, sizeof(srx)); + ret =3D kernel_bind(socket, (struct sockaddr_unsized *)&srx, sizeof(srx)); if (ret < 0) goto error_2; =20 diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c index 77b99e8ef35a..60cc812ce633 100644 --- a/net/smc/af_smc.c +++ b/net/smc/af_smc.c @@ -421,7 +421,7 @@ static struct sock *smc_sock_alloc(struct net *net, str= uct socket *sock, return sk; } =20 -int smc_bind(struct socket *sock, struct sockaddr *uaddr, +int smc_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len) { struct sockaddr_in *addr =3D (struct sockaddr_in *)uaddr; diff --git a/net/socket.c b/net/socket.c index e8892b218708..aaefb2e519a7 100644 --- a/net/socket.c +++ b/net/socket.c @@ -1872,7 +1872,7 @@ int __sys_bind_socket(struct socket *sock, struct soc= kaddr_storage *address, addrlen); if (!err) err =3D READ_ONCE(sock->ops)->bind(sock, - (struct sockaddr *)address, + (struct sockaddr_unsized *)address, addrlen); return err; } @@ -3583,13 +3583,13 @@ static long compat_sock_ioctl(struct file *file, un= signed int cmd, * Returns 0 or an error. */ =20 -int kernel_bind(struct socket *sock, struct sockaddr *addr, int addrlen) +int kernel_bind(struct socket *sock, struct sockaddr_unsized *addr, int ad= drlen) { struct sockaddr_storage address; =20 memcpy(&address, addr, addrlen); =20 - return READ_ONCE(sock->ops)->bind(sock, (struct sockaddr *)&address, + return READ_ONCE(sock->ops)->bind(sock, (struct sockaddr_unsized *)&addre= ss, addrlen); } EXPORT_SYMBOL(kernel_bind); diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 8ca354ecfd02..318ee24ad900 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -1457,12 +1457,12 @@ static int rpc_sockname(struct net *net, struct soc= kaddr *sap, size_t salen, switch (sap->sa_family) { case AF_INET: err =3D kernel_bind(sock, - (struct sockaddr *)&rpc_inaddr_loopback, + (struct sockaddr_unsized *)&rpc_inaddr_loopback, sizeof(rpc_inaddr_loopback)); break; case AF_INET6: err =3D kernel_bind(sock, - (struct sockaddr *)&rpc_in6addr_loopback, + (struct sockaddr_unsized *)&rpc_in6addr_loopback, sizeof(rpc_in6addr_loopback)); break; default: diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index 7b90abc5cf0e..16ff6c100821 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c @@ -1557,7 +1557,7 @@ static struct svc_xprt *svc_create_socket(struct svc_= serv *serv, ip6_sock_set_v6only(sock->sk); if (type =3D=3D SOCK_STREAM) sock->sk->sk_reuse =3D SK_CAN_REUSE; /* allow address reuse */ - error =3D kernel_bind(sock, sin, len); + error =3D kernel_bind(sock, (struct sockaddr_unsized *)sin, len); if (error < 0) goto bummer; =20 diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 3aa987e7f072..95732a45b059 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -1845,8 +1845,8 @@ static int xs_bind(struct sock_xprt *transport, struc= t socket *sock) memcpy(&myaddr, &transport->srcaddr, transport->xprt.addrlen); do { rpc_set_port((struct sockaddr *)&myaddr, port); - err =3D kernel_bind(sock, (struct sockaddr *)&myaddr, - transport->xprt.addrlen); + err =3D kernel_bind(sock, (struct sockaddr_unsized *)&myaddr, + transport->xprt.addrlen); if (err =3D=3D 0) { if (transport->xprt.reuseport) transport->srcport =3D port; diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 1574a83384f8..14f75ee88ddf 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c @@ -710,7 +710,7 @@ int tipc_sk_bind(struct socket *sock, struct sockaddr *= skaddr, int alen) return res; } =20 -static int tipc_bind(struct socket *sock, struct sockaddr *skaddr, int ale= n) +static int tipc_bind(struct socket *sock, struct sockaddr_unsized *skaddr,= int alen) { struct tipc_uaddr *ua =3D (struct tipc_uaddr *)skaddr; u32 atype =3D ua->addrtype; @@ -726,7 +726,7 @@ static int tipc_bind(struct socket *sock, struct sockad= dr *skaddr, int alen) return -EACCES; } } - return tipc_sk_bind(sock, skaddr, alen); + return tipc_sk_bind(sock, (struct sockaddr *)skaddr, alen); } =20 /** diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 768098dec231..8e92d63fa95b 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -854,7 +854,7 @@ static int unix_listen(struct socket *sock, int backlog) } =20 static int unix_release(struct socket *); -static int unix_bind(struct socket *, struct sockaddr *, int); +static int unix_bind(struct socket *, struct sockaddr_unsized *, int); static int unix_stream_connect(struct socket *, struct sockaddr *, int addr_len, int flags); static int unix_socketpair(struct socket *, struct socket *); @@ -1477,7 +1477,7 @@ static int unix_bind_abstract(struct sock *sk, struct= sockaddr_un *sunaddr, return err; } =20 -static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr= _len) +static int unix_bind(struct socket *sock, struct sockaddr_unsized *uaddr, = int addr_len) { struct sockaddr_un *sunaddr =3D (struct sockaddr_un *)uaddr; struct sock *sk =3D sock->sk; diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index 4c2db6cca557..fca26e279845 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -987,7 +987,7 @@ static int vsock_release(struct socket *sock) } =20 static int -vsock_bind(struct socket *sock, struct sockaddr *addr, int addr_len) +vsock_bind(struct socket *sock, struct sockaddr_unsized *addr, int addr_le= n) { int err; struct sock *sk; @@ -995,7 +995,7 @@ vsock_bind(struct socket *sock, struct sockaddr *addr, = int addr_len) =20 sk =3D sock->sk; =20 - if (vsock_addr_cast(addr, addr_len, &vm_addr) !=3D 0) + if (vsock_addr_cast((struct sockaddr *)addr, addr_len, &vm_addr) !=3D 0) return -EINVAL; =20 lock_sock(sk); diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c index 655d1e0ae25f..ca8006d8f792 100644 --- a/net/x25/af_x25.c +++ b/net/x25/af_x25.c @@ -670,7 +670,7 @@ static int x25_release(struct socket *sock) return 0; } =20 -static int x25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_= len) +static int x25_bind(struct socket *sock, struct sockaddr_unsized *uaddr, i= nt addr_len) { struct sock *sk =3D sock->sk; struct sockaddr_x25 *addr =3D (struct sockaddr_x25 *)uaddr; diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c index 7b0c68a70888..fb878a9e922f 100644 --- a/net/xdp/xsk.c +++ b/net/xdp/xsk.c @@ -1241,7 +1241,7 @@ static bool xsk_validate_queues(struct xdp_sock *xs) return xs->fq_tmp && xs->cq_tmp; } =20 -static int xsk_bind(struct socket *sock, struct sockaddr *addr, int addr_l= en) +static int xsk_bind(struct socket *sock, struct sockaddr_unsized *addr, in= t addr_len) { struct sockaddr_xdp *sxdp =3D (struct sockaddr_xdp *)addr; struct sock *sk =3D sock->sk; diff --git a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c b/tools/t= esting/selftests/bpf/test_kmods/bpf_testmod.c index 8074bc5f6f20..0497b5dea25c 100644 --- a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c +++ b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c @@ -923,7 +923,7 @@ __bpf_kfunc int bpf_kfunc_call_kernel_bind(struct addr_= args *args) goto out; } =20 - err =3D kernel_bind(sock, (struct sockaddr *)&args->addr, args->addrlen); + err =3D kernel_bind(sock, (struct sockaddr_unsized *)&args->addr, args->a= ddrlen); out: mutex_unlock(&sock_lock); =20 --=20 2.34.1 From nobody Sat Feb 7 21:17:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C3BB731A056; Wed, 29 Oct 2025 21:44:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761774268; cv=none; b=IREeV0RKzRpp0Tp9C/eprER3ZSFpUCuLfeJ1L3RPlziCy8cUymuHzMSE0rbvWKcmfZ9iuBL+YFy27Ol8eVoH/DsUhBG6dhcJlHUyVK0dtITYIadT66pXAJmrNhnc8sATbJtBSz7105WOKVsMprs+EbETSRbjJ9OiintX+R30HY0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761774268; c=relaxed/simple; bh=ZbBOlFQuP1Bp2zCCApgX/HQ7KdMd1fQtbNwx/C1GUGc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Q1M1N0cM63bpNr/mEl/vlavV1IPg3Mo8uK+LDaq/kD3fSawNrYmQ1dzd+qOOjRBrVzmrhuhqKYDN3aeg60zpSjP19M+QK+BRkOL4DI1KswkgU/HRKCYlsAnODTjk6XL4PS6xWMjfjzbKS8a38yCf4dH+4QWqreQa775pDIdyT2o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Sz93ftrK; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Sz93ftrK" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 647D8C113D0; Wed, 29 Oct 2025 21:44:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761774268; bh=ZbBOlFQuP1Bp2zCCApgX/HQ7KdMd1fQtbNwx/C1GUGc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Sz93ftrKRykivX7JeTvAehTw/KfOsV5F1uSFlaLhQCSqMmdxH3xx+VekQDQd8XCaC 6LloPEE4W2jJ6c3EPQ6fdQYrBGpsCEqR2W19NjEMOprHaA5X2JBOxhMRsd8rtuEJDv b69XwGJxhFTRAMfrX5Ll1ud1NEgrZadeK4sJ2oSFNcqyhd2bn87WoIrerZesxjZDBL LEJ135pm7nLwNKK+weQdtxm240QUNHbmgB/9js8R/+sjdcMUvRKEoCD7GautxcFgR+ r4elm6n1q0jH1blSV5Yp6R5Dyun/QrUFoiI/HOnVFu8nDWu0TqnY8ehkozh5YiFoPl apFYb7NrfhH/Q== From: Kees Cook To: Paolo Abeni Cc: Kees Cook , Jakub Kicinski , "Gustavo A. R. Silva" , Alexei Starovoitov , Daniel Borkmann , John Fastabend , "David S. Miller" , Eric Dumazet , Simon Horman , Kuniyuki Iwashima , Willem de Bruijn , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [net-next PATCH v4 2/7] net: Convert proto_ops connect() callbacks to use sockaddr_unsized Date: Wed, 29 Oct 2025 14:43:59 -0700 Message-Id: <20251029214428.2467496-2-kees@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251029214355.work.602-kees@kernel.org> References: <20251029214355.work.602-kees@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=54119; i=kees@kernel.org; h=from:subject; bh=ZbBOlFQuP1Bp2zCCApgX/HQ7KdMd1fQtbNwx/C1GUGc=; b=owGbwMvMwCVmps19z/KJym7G02pJDJlMXQu5whfsEmHZsfuYc3G9QF/7irkZb+O2vn0y+erxU +8mTU451VHKwiDGxSArpsgSZOce5+Lxtj3cfa4izBxWJpAhDFycAjARiVuMDEvWZhibxa9bv3Pn +evFdj8dwyYJLLCbojtH7puk94v313UY/nu/3MY06bzFj/wvR9O+PL50W9xa9mLqHvWV5dw/Vk/ SLOcBAA== X-Developer-Key: i=kees@kernel.org; a=openpgp; fpr=A5C3F68F229DD60F723E6E138972F4DFDC6DC026 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 --- include/linux/bpf-cgroup.h | 6 +++--- include/linux/net.h | 4 ++-- include/net/inet_common.h | 6 +++--- include/net/sctp/sctp.h | 2 +- include/net/sock.h | 2 +- include/net/vsock_addr.h | 2 +- net/smc/smc.h | 2 +- drivers/block/drbd/drbd_receiver.c | 2 +- drivers/infiniband/hw/erdma/erdma_cm.c | 2 +- drivers/infiniband/sw/siw/siw_cm.c | 2 +- drivers/net/ppp/pppoe.c | 4 ++-- drivers/net/ppp/pptp.c | 4 ++-- drivers/net/wireless/ath/ath10k/qmi.c | 2 +- drivers/net/wireless/ath/ath11k/qmi.c | 2 +- drivers/net/wireless/ath/ath12k/qmi.c | 2 +- drivers/nvme/host/tcp.c | 2 +- drivers/slimbus/qcom-ngd-ctrl.c | 2 +- drivers/xen/pvcalls-back.c | 2 +- fs/coredump.c | 2 +- fs/dlm/lowcomms.c | 2 +- fs/ocfs2/cluster/tcp.c | 2 +- fs/smb/client/connect.c | 2 +- net/9p/trans_fd.c | 6 +++--- net/appletalk/ddp.c | 2 +- net/atm/pvc.c | 4 ++-- net/atm/svc.c | 2 +- net/ax25/af_ax25.c | 2 +- net/bluetooth/iso.c | 2 +- net/bluetooth/l2cap_sock.c | 2 +- net/bluetooth/rfcomm/core.c | 2 +- net/bluetooth/rfcomm/sock.c | 3 ++- net/bluetooth/sco.c | 2 +- net/caif/caif_socket.c | 2 +- net/can/bcm.c | 2 +- net/can/j1939/socket.c | 2 +- net/ceph/messenger.c | 2 +- net/core/sock.c | 2 +- net/ieee802154/socket.c | 4 ++-- net/ipv4/af_inet.c | 14 +++++++------- net/ipv4/tcp.c | 2 +- net/ipv4/udp_tunnel_core.c | 2 +- net/ipv6/ip6_udp_tunnel.c | 2 +- net/iucv/af_iucv.c | 4 ++-- net/l2tp/l2tp_core.c | 4 ++-- net/l2tp/l2tp_ppp.c | 2 +- net/llc/af_llc.c | 2 +- net/mctp/af_mctp.c | 2 +- net/mctp/test/utils.c | 5 +++-- net/mptcp/subflow.c | 2 +- net/netfilter/ipvs/ip_vs_sync.c | 2 +- net/netlink/af_netlink.c | 2 +- net/netrom/af_netrom.c | 4 ++-- net/nfc/llcp_sock.c | 2 +- net/nfc/rawsock.c | 2 +- net/phonet/socket.c | 6 +++--- net/qrtr/af_qrtr.c | 2 +- net/rds/af_rds.c | 2 +- net/rds/tcp_connect.c | 2 +- net/rose/af_rose.c | 3 ++- net/rxrpc/af_rxrpc.c | 2 +- net/sctp/socket.c | 4 ++-- net/smc/af_smc.c | 4 ++-- net/socket.c | 8 ++++---- net/sunrpc/clnt.c | 2 +- net/sunrpc/xprtsock.c | 5 +++-- net/tipc/socket.c | 2 +- net/unix/af_unix.c | 8 ++++---- net/vmw_vsock/af_vsock.c | 6 +++--- net/vmw_vsock/vsock_addr.c | 2 +- net/x25/af_x25.c | 2 +- samples/qmi/qmi_sample_client.c | 2 +- .../testing/selftests/bpf/test_kmods/bpf_testmod.c | 2 +- 72 files changed, 110 insertions(+), 106 deletions(-) diff --git a/include/linux/bpf-cgroup.h b/include/linux/bpf-cgroup.h index aedf573bdb42..a7fb4f46974f 100644 --- a/include/linux/bpf-cgroup.h +++ b/include/linux/bpf-cgroup.h @@ -238,7 +238,7 @@ static inline bool cgroup_bpf_sock_enabled(struct sock = *sk, ({ \ int __ret =3D 0; \ if (cgroup_bpf_enabled(atype)) \ - __ret =3D __cgroup_bpf_run_filter_sock_addr(sk, uaddr, uaddrlen, \ + __ret =3D __cgroup_bpf_run_filter_sock_addr(sk, (struct sockaddr *)uaddr= , uaddrlen, \ atype, NULL, NULL); \ __ret; \ }) @@ -248,7 +248,7 @@ static inline bool cgroup_bpf_sock_enabled(struct sock = *sk, int __ret =3D 0; \ if (cgroup_bpf_enabled(atype)) { \ lock_sock(sk); \ - __ret =3D __cgroup_bpf_run_filter_sock_addr(sk, uaddr, uaddrlen, \ + __ret =3D __cgroup_bpf_run_filter_sock_addr(sk, (struct sockaddr *)uaddr= , uaddrlen, \ atype, t_ctx, NULL); \ release_sock(sk); \ } \ @@ -266,7 +266,7 @@ static inline bool cgroup_bpf_sock_enabled(struct sock = *sk, int __ret =3D 0; \ if (cgroup_bpf_enabled(atype)) { \ lock_sock(sk); \ - __ret =3D __cgroup_bpf_run_filter_sock_addr(sk, uaddr, uaddrlen, \ + __ret =3D __cgroup_bpf_run_filter_sock_addr(sk, (struct sockaddr *)uaddr= , uaddrlen, \ atype, NULL, &__flags); \ release_sock(sk); \ if (__flags & BPF_RET_BIND_NO_CAP_NET_BIND_SERVICE) \ diff --git a/include/linux/net.h b/include/linux/net.h index 0e316f063113..db6bc997ca5b 100644 --- a/include/linux/net.h +++ b/include/linux/net.h @@ -166,7 +166,7 @@ struct proto_ops { struct sockaddr_unsized *myaddr, int sockaddr_len); int (*connect) (struct socket *sock, - struct sockaddr *vaddr, + struct sockaddr_unsized *vaddr, int sockaddr_len, int flags); int (*socketpair)(struct socket *sock1, 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 ad= drlen); int kernel_listen(struct socket *sock, int backlog); 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 kernel_getsockname(struct socket *sock, struct sockaddr *addr); int kernel_getpeername(struct socket *sock, struct sockaddr *addr); diff --git a/include/net/inet_common.h b/include/net/inet_common.h index 1666cf6f539e..ebafd96912bb 100644 --- a/include/net/inet_common.h +++ b/include/net/inet_common.h @@ -23,11 +23,11 @@ struct sockaddr; struct socket; =20 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 *uadd= r, 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 *ua= ddr, 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 inet_accept(struct socket *sock, struct socket *newsock, struct proto_accept_arg *arg); diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h index e96d1bd087f6..d3178a1542d0 100644 --- a/include/net/sctp/sctp.h +++ b/include/net/sctp/sctp.h @@ -85,7 +85,7 @@ void sctp_udp_sock_stop(struct net *net); /* * 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 sctp_backlog_rcv(struct sock *sk, struct sk_buff *skb); int sctp_inet_listen(struct socket *sock, int backlog); diff --git a/include/net/sock.h b/include/net/sock.h index 3e0618514ce4..3e672a92560b 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -1902,7 +1902,7 @@ int sock_cmsg_send(struct sock *sk, struct msghdr *ms= g, * does not implement a particular function. */ 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, i= nt len, int flags); int sock_no_socketpair(struct socket *, struct socket *); int sock_no_accept(struct socket *, struct socket *, struct proto_accept_a= rg *); int sock_no_getname(struct socket *, struct sockaddr *, int); diff --git a/include/net/vsock_addr.h b/include/net/vsock_addr.h index cf8cc140d68d..c3f4cc206198 100644 --- a/include/net/vsock_addr.h +++ b/include/net/vsock_addr.h @@ -16,7 +16,7 @@ bool vsock_addr_bound(const struct sockaddr_vm *addr); void vsock_addr_unbind(struct sockaddr_vm *addr); bool vsock_addr_equals_addr(const struct sockaddr_vm *addr, 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); =20 #endif diff --git a/net/smc/smc.h b/net/smc/smc.h index a008dbe6d6f6..9e6af72784ba 100644 --- a/net/smc/smc.h +++ b/net/smc/smc.h @@ -44,7 +44,7 @@ void smc_release_cb(struct sock *sk); int smc_release(struct socket *sock); int smc_bind(struct socket *sock, struct sockaddr_unsized *uaddr, 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 smc_accept(struct socket *sock, struct socket *new_sock, struct proto_accept_arg *arg); diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_r= eceiver.c index d9296f74f902..33bc91665fe8 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -458,7 +458,7 @@ static struct socket *drbd_try_connect(struct drbd_conn= ection *connection) * stay C_WF_CONNECTION, don't go Disconnecting! */ disconnect_on_error =3D 0; what =3D "connect"; - err =3D sock->ops->connect(sock, (struct sockaddr *) &peer_in6, peer_addr= _len, 0); + err =3D sock->ops->connect(sock, (struct sockaddr_unsized *) &peer_in6, p= eer_addr_len, 0); =20 out: if (err < 0) { diff --git a/drivers/infiniband/hw/erdma/erdma_cm.c b/drivers/infiniband/hw= /erdma/erdma_cm.c index ef66a6359eb9..ed21ba0037a4 100644 --- a/drivers/infiniband/hw/erdma/erdma_cm.c +++ b/drivers/infiniband/hw/erdma/erdma_cm.c @@ -996,7 +996,7 @@ static int kernel_bindconnect(struct socket *s, struct = sockaddr *laddr, ret =3D s->ops->bind(s, (struct sockaddr_unsized *)laddr, laddrlen); if (ret) return ret; - ret =3D s->ops->connect(s, raddr, raddrlen, flags); + ret =3D s->ops->connect(s, (struct sockaddr_unsized *)raddr, raddrlen, fl= ags); return ret < 0 ? ret : 0; } =20 diff --git a/drivers/infiniband/sw/siw/siw_cm.c b/drivers/infiniband/sw/siw= /siw_cm.c index 7fe118cacb3f..eb0bd4f79a85 100644 --- a/drivers/infiniband/sw/siw/siw_cm.c +++ b/drivers/infiniband/sw/siw/siw_cm.c @@ -1344,7 +1344,7 @@ static int kernel_bindconnect(struct socket *s, struc= t sockaddr *laddr, if (rv < 0) return rv; =20 - rv =3D s->ops->connect(s, raddr, size, flags); + rv =3D s->ops->connect(s, (struct sockaddr_unsized *)raddr, size, flags); =20 return rv < 0 ? rv : 0; } diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c index 4ac6afce267b..4275b393a454 100644 --- a/drivers/net/ppp/pppoe.c +++ b/drivers/net/ppp/pppoe.c @@ -608,8 +608,8 @@ static int pppoe_release(struct socket *sock) return 0; } =20 -static int pppoe_connect(struct socket *sock, struct sockaddr *uservaddr, - int sockaddr_len, int flags) +static int pppoe_connect(struct socket *sock, struct sockaddr_unsized *use= rvaddr, + int sockaddr_len, int flags) { struct sock *sk =3D sock->sk; struct sockaddr_pppox *sp =3D (struct sockaddr_pppox *)uservaddr; diff --git a/drivers/net/ppp/pptp.c b/drivers/net/ppp/pptp.c index d07e87a0974c..b18acd810561 100644 --- a/drivers/net/ppp/pptp.c +++ b/drivers/net/ppp/pptp.c @@ -415,8 +415,8 @@ static int pptp_bind(struct socket *sock, struct sockad= dr_unsized *uservaddr, return error; } =20 -static int pptp_connect(struct socket *sock, struct sockaddr *uservaddr, - int sockaddr_len, int flags) +static int pptp_connect(struct socket *sock, struct sockaddr_unsized *user= vaddr, + int sockaddr_len, int flags) { struct sock *sk =3D sock->sk; struct sockaddr_pppox *sp =3D (struct sockaddr_pppox *) uservaddr; diff --git a/drivers/net/wireless/ath/ath10k/qmi.c b/drivers/net/wireless/a= th/ath10k/qmi.c index f1f33af0170a..8275345631a0 100644 --- a/drivers/net/wireless/ath/ath10k/qmi.c +++ b/drivers/net/wireless/ath/ath10k/qmi.c @@ -986,7 +986,7 @@ static int ath10k_qmi_new_server(struct qmi_handle *qmi= _hdl, =20 ath10k_dbg(ar, ATH10K_DBG_QMI, "wifi fw qmi service found\n"); =20 - ret =3D kernel_connect(qmi_hdl->sock, (struct sockaddr *)&qmi->sq, + ret =3D kernel_connect(qmi_hdl->sock, (struct sockaddr_unsized *)&qmi->sq, sizeof(qmi->sq), 0); if (ret) { ath10k_err(ar, "failed to connect to a remote QMI service port\n"); diff --git a/drivers/net/wireless/ath/ath11k/qmi.c b/drivers/net/wireless/a= th/ath11k/qmi.c index aea56c38bf8f..ff6a97e328b8 100644 --- a/drivers/net/wireless/ath/ath11k/qmi.c +++ b/drivers/net/wireless/ath/ath11k/qmi.c @@ -3177,7 +3177,7 @@ static int ath11k_qmi_ops_new_server(struct qmi_handl= e *qmi_hdl, sq->sq_node =3D service->node; sq->sq_port =3D service->port; =20 - ret =3D kernel_connect(qmi_hdl->sock, (struct sockaddr *)sq, + ret =3D kernel_connect(qmi_hdl->sock, (struct sockaddr_unsized *)sq, sizeof(*sq), 0); if (ret) { ath11k_warn(ab, "failed to connect to qmi remote service: %d\n", ret); diff --git a/drivers/net/wireless/ath/ath12k/qmi.c b/drivers/net/wireless/a= th/ath12k/qmi.c index 36325e62aa24..cf9c25df3ffd 100644 --- a/drivers/net/wireless/ath/ath12k/qmi.c +++ b/drivers/net/wireless/ath/ath12k/qmi.c @@ -3740,7 +3740,7 @@ static int ath12k_qmi_ops_new_server(struct qmi_handl= e *qmi_hdl, sq->sq_node =3D service->node; sq->sq_port =3D service->port; =20 - ret =3D kernel_connect(qmi_hdl->sock, (struct sockaddr *)sq, + ret =3D kernel_connect(qmi_hdl->sock, (struct sockaddr_unsized *)sq, sizeof(*sq), 0); if (ret) { ath12k_warn(ab, "qmi failed to connect to remote service %d\n", ret); diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c index 35d0bd91f6fd..6795b8286c35 100644 --- a/drivers/nvme/host/tcp.c +++ b/drivers/nvme/host/tcp.c @@ -1872,7 +1872,7 @@ static int nvme_tcp_alloc_queue(struct nvme_ctrl *nct= rl, int qid, dev_dbg(nctrl->device, "connecting queue %d\n", nvme_tcp_queue_id(queue)); =20 - ret =3D kernel_connect(queue->sock, (struct sockaddr *)&ctrl->addr, + ret =3D kernel_connect(queue->sock, (struct sockaddr_unsized *)&ctrl->add= r, sizeof(ctrl->addr), 0); if (ret) { dev_err(nctrl->device, diff --git a/drivers/slimbus/qcom-ngd-ctrl.c b/drivers/slimbus/qcom-ngd-ctr= l.c index 4fb66986cc22..fdb94dc4a730 100644 --- a/drivers/slimbus/qcom-ngd-ctrl.c +++ b/drivers/slimbus/qcom-ngd-ctrl.c @@ -463,7 +463,7 @@ static int qcom_slim_qmi_init(struct qcom_slim_ngd_ctrl= *ctrl, } =20 rc =3D kernel_connect(handle->sock, - (struct sockaddr *)&ctrl->qmi.svc_info, + (struct sockaddr_unsized *)&ctrl->qmi.svc_info, sizeof(ctrl->qmi.svc_info), 0); if (rc < 0) { dev_err(ctrl->dev, "Remote Service connect failed: %d\n", rc); diff --git a/drivers/xen/pvcalls-back.c b/drivers/xen/pvcalls-back.c index da1b516b9cfd..c5b6f6fa11eb 100644 --- a/drivers/xen/pvcalls-back.c +++ b/drivers/xen/pvcalls-back.c @@ -409,7 +409,7 @@ static int pvcalls_back_connect(struct xenbus_device *d= ev, ret =3D sock_create(AF_INET, SOCK_STREAM, 0, &sock); if (ret < 0) goto out; - ret =3D inet_stream_connect(sock, sa, req->u.connect.len, 0); + ret =3D inet_stream_connect(sock, (struct sockaddr_unsized *)sa, req->u.c= onnect.len, 0); if (ret < 0) { sock_release(sock); goto out; diff --git a/fs/coredump.c b/fs/coredump.c index 5c1c381ee380..14837d9e2abb 100644 --- a/fs/coredump.c +++ b/fs/coredump.c @@ -708,7 +708,7 @@ static bool coredump_sock_connect(struct core_name *cn,= struct coredump_params * */ pidfs_coredump(cprm); =20 - retval =3D kernel_connect(socket, (struct sockaddr *)(&addr), addr_len, + retval =3D kernel_connect(socket, (struct sockaddr_unsized *)(&addr), add= r_len, O_NONBLOCK | SOCK_COREDUMP); =20 if (retval) { diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c index 0500421b6e3b..f832dafdaca8 100644 --- a/fs/dlm/lowcomms.c +++ b/fs/dlm/lowcomms.c @@ -1599,7 +1599,7 @@ static int dlm_connect(struct connection *con) =20 log_print_ratelimited("connecting to %d", con->nodeid); make_sockaddr(&addr, dlm_config.ci_tcp_port, &addr_len); - result =3D kernel_connect(sock, (struct sockaddr *)&addr, addr_len, 0); + result =3D kernel_connect(sock, (struct sockaddr_unsized *)&addr, addr_le= n, 0); switch (result) { case -EINPROGRESS: /* not an error */ diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c index c7734193d8d7..79b281e32f4c 100644 --- a/fs/ocfs2/cluster/tcp.c +++ b/fs/ocfs2/cluster/tcp.c @@ -1638,7 +1638,7 @@ static void o2net_start_connect(struct work_struct *w= ork) remoteaddr.sin_port =3D node->nd_ipv4_port; =20 ret =3D sc->sc_sock->ops->connect(sc->sc_sock, - (struct sockaddr *)&remoteaddr, + (struct sockaddr_unsized *)&remoteaddr, sizeof(remoteaddr), O_NONBLOCK); if (ret =3D=3D -EINPROGRESS) diff --git a/fs/smb/client/connect.c b/fs/smb/client/connect.c index 96d972263020..73120988661a 100644 --- a/fs/smb/client/connect.c +++ b/fs/smb/client/connect.c @@ -3411,7 +3411,7 @@ generic_ip_connect(struct TCP_Server_Info *server) socket->sk->sk_sndbuf, socket->sk->sk_rcvbuf, socket->sk->sk_rcvtimeo); =20 - rc =3D kernel_connect(socket, saddr, slen, + rc =3D kernel_connect(socket, (struct sockaddr_unsized *)saddr, slen, server->noblockcnt ? O_NONBLOCK : 0); /* * When mounting SMB root file systems, we do not want to block in diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c index ef517bb307e2..49d674f5e73a 100644 --- a/net/9p/trans_fd.c +++ b/net/9p/trans_fd.c @@ -1018,7 +1018,7 @@ p9_fd_create_tcp(struct p9_client *client, const char= *addr, char *args) } =20 err =3D READ_ONCE(csocket->ops)->connect(csocket, - (struct sockaddr *)&stor, + (struct sockaddr_unsized *)&stor, sizeof(stor), 0); if (err < 0) { pr_err("%s (%d): problem connecting socket to %s\n", @@ -1058,8 +1058,8 @@ p9_fd_create_unix(struct p9_client *client, const cha= r *addr, char *args) =20 return err; } - err =3D READ_ONCE(csocket->ops)->connect(csocket, (struct sockaddr *)&sun= _server, - sizeof(struct sockaddr_un) - 1, 0); + err =3D READ_ONCE(csocket->ops)->connect(csocket, (struct sockaddr_unsize= d *)&sun_server, + sizeof(struct sockaddr_un) - 1, 0); if (err < 0) { pr_err("%s (%d): problem connecting socket: %s: %d\n", __func__, task_pid_nr(current), addr, err); diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c index 45db43cde67f..2a01fff46c9d 100644 --- a/net/appletalk/ddp.c +++ b/net/appletalk/ddp.c @@ -1204,7 +1204,7 @@ static int atalk_bind(struct socket *sock, struct soc= kaddr_unsized *uaddr, int a } =20 /* 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 *uad= dr, int addr_len, int flags) { struct sock *sk =3D sock->sk; diff --git a/net/atm/pvc.c b/net/atm/pvc.c index 62fdf07c53de..8f5e76f5dd9e 100644 --- a/net/atm/pvc.c +++ b/net/atm/pvc.c @@ -56,10 +56,10 @@ static int pvc_bind(struct socket *sock, struct sockadd= r_unsized *sockaddr, return error; } =20 -static int pvc_connect(struct socket *sock, struct sockaddr *sockaddr, +static int pvc_connect(struct socket *sock, struct sockaddr_unsized *socka= ddr, int sockaddr_len, int flags) { - return pvc_bind(sock, (struct sockaddr_unsized *)sockaddr, sockaddr_len); + return pvc_bind(sock, sockaddr, sockaddr_len); } =20 static int pvc_setsockopt(struct socket *sock, int level, int optname, diff --git a/net/atm/svc.c b/net/atm/svc.c index 1906a493c8aa..005964250ecd 100644 --- a/net/atm/svc.c +++ b/net/atm/svc.c @@ -153,7 +153,7 @@ static int svc_bind(struct socket *sock, struct sockadd= r_unsized *sockaddr, return error; } =20 -static int svc_connect(struct socket *sock, struct sockaddr *sockaddr, +static int svc_connect(struct socket *sock, struct sockaddr_unsized *socka= ddr, int sockaddr_len, int flags) { DEFINE_WAIT(wait); diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c index 23c558ff9682..7ebbff2f0020 100644 --- a/net/ax25/af_ax25.c +++ b/net/ax25/af_ax25.c @@ -1175,7 +1175,7 @@ static int ax25_bind(struct socket *sock, struct sock= addr_unsized *uaddr, int ad * FIXME: nonblock behaviour looks like it may have a bug. */ 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 =3D sock->sk; ax25_cb *ax25 =3D sk_to_ax25(sk), *ax25t; diff --git a/net/bluetooth/iso.c b/net/bluetooth/iso.c index 1fda214a815d..58cc835fec3b 100644 --- a/net/bluetooth/iso.c +++ b/net/bluetooth/iso.c @@ -1080,7 +1080,7 @@ static int iso_sock_bind(struct socket *sock, struct = sockaddr_unsized *addr, return err; } =20 -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) { struct sockaddr_iso *sa =3D (struct sockaddr_iso *)addr; diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c index ca7394d8fa4e..9ee189c815d4 100644 --- a/net/bluetooth/l2cap_sock.c +++ b/net/bluetooth/l2cap_sock.c @@ -178,7 +178,7 @@ static int l2cap_sock_bind(struct socket *sock, struct = sockaddr_unsized *addr, i return err; } =20 -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) { struct sock *sk =3D sock->sk; diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c index d62fd6c57617..57b1dca8141f 100644 --- a/net/bluetooth/rfcomm/core.c +++ b/net/bluetooth/rfcomm/core.c @@ -808,7 +808,7 @@ static struct rfcomm_session *rfcomm_session_create(bda= ddr_t *src, addr.l2_psm =3D cpu_to_le16(L2CAP_PSM_RFCOMM); addr.l2_cid =3D 0; addr.l2_bdaddr_type =3D BDADDR_BREDR; - *err =3D kernel_connect(sock, (struct sockaddr *) &addr, sizeof(addr), O_= NONBLOCK); + *err =3D kernel_connect(sock, (struct sockaddr_unsized *)&addr, sizeof(ad= dr), O_NONBLOCK); if (*err =3D=3D 0 || *err =3D=3D -EINPROGRESS) return s; =20 diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c index 8c8762bbc6de..be6639cd6f59 100644 --- a/net/bluetooth/rfcomm/sock.c +++ b/net/bluetooth/rfcomm/sock.c @@ -371,7 +371,8 @@ static int rfcomm_sock_bind(struct socket *sock, struct= sockaddr_unsized *addr, return err; } =20 -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_unsize= d *addr, + int alen, int flags) { struct sockaddr_rc *sa =3D (struct sockaddr_rc *) addr; struct sock *sk =3D sock->sk; diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c index 01d878205e58..7afe65e7ff37 100644 --- a/net/bluetooth/sco.c +++ b/net/bluetooth/sco.c @@ -639,7 +639,7 @@ static int sco_sock_bind(struct socket *sock, struct so= ckaddr_unsized *addr, return err; } =20 -static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, in= t alen, int flags) +static int sco_sock_connect(struct socket *sock, struct sockaddr_unsized *= addr, int alen, int flags) { struct sockaddr_sco *sa =3D (struct sockaddr_sco *) addr; struct sock *sk =3D sock->sk; diff --git a/net/caif/caif_socket.c b/net/caif/caif_socket.c index 039dfbd367c9..af218742af5a 100644 --- a/net/caif/caif_socket.c +++ b/net/caif/caif_socket.c @@ -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 a= nd * disconnect. */ -static int caif_connect(struct socket *sock, struct sockaddr *uaddr, +static int caif_connect(struct socket *sock, struct sockaddr_unsized *uadd= r, int addr_len, int flags) { struct sock *sk =3D sock->sk; diff --git a/net/can/bcm.c b/net/can/bcm.c index 5e690a2377e4..7eba8ae01a5b 100644 --- a/net/can/bcm.c +++ b/net/can/bcm.c @@ -1657,7 +1657,7 @@ static int bcm_release(struct socket *sock) return 0; } =20 -static int bcm_connect(struct socket *sock, struct sockaddr *uaddr, int le= n, +static int bcm_connect(struct socket *sock, struct sockaddr_unsized *uaddr= , int len, int flags) { struct sockaddr_can *addr =3D (struct sockaddr_can *)uaddr; diff --git a/net/can/j1939/socket.c b/net/can/j1939/socket.c index a2abedc757d0..6272326dd614 100644 --- a/net/can/j1939/socket.c +++ b/net/can/j1939/socket.c @@ -535,7 +535,7 @@ static int j1939_sk_bind(struct socket *sock, struct so= ckaddr_unsized *uaddr, in return ret; } =20 -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) { struct sockaddr_can *addr =3D (struct sockaddr_can *)uaddr; diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c index f8181acaf870..70b25f4ecba6 100644 --- a/net/ceph/messenger.c +++ b/net/ceph/messenger.c @@ -460,7 +460,7 @@ int ceph_tcp_connect(struct ceph_connection *con) set_sock_callbacks(sock, con); =20 con_sock_state_connecting(con); - ret =3D kernel_connect(sock, (struct sockaddr *)&ss, sizeof(ss), + ret =3D kernel_connect(sock, (struct sockaddr_unsized *)&ss, sizeof(ss), O_NONBLOCK); if (ret =3D=3D -EINPROGRESS) { dout("connect %s EINPROGRESS sk_state =3D %u\n", diff --git a/net/core/sock.c b/net/core/sock.c index 6c8d50338f71..e6e38b6b6b33 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -3426,7 +3426,7 @@ int sock_no_bind(struct socket *sock, struct sockaddr= _unsized *saddr, int len) } EXPORT_SYMBOL(sock_no_bind); =20 -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) { return -EOPNOTSUPP; diff --git a/net/ieee802154/socket.c b/net/ieee802154/socket.c index 99ddfad9bb88..b93fd85f248a 100644 --- a/net/ieee802154/socket.c +++ b/net/ieee802154/socket.c @@ -107,7 +107,7 @@ static int ieee802154_sock_bind(struct socket *sock, st= ruct sockaddr_unsized *ua return sock_no_bind(sock, uaddr, addr_len); } =20 -static int ieee802154_sock_connect(struct socket *sock, struct sockaddr *u= addr, +static int ieee802154_sock_connect(struct socket *sock, struct sockaddr_un= sized *uaddr, int addr_len, int flags) { struct sock *sk =3D sock->sk; @@ -118,7 +118,7 @@ static int ieee802154_sock_connect(struct socket *sock,= struct sockaddr *uaddr, if (uaddr->sa_family =3D=3D AF_UNSPEC) return sk->sk_prot->disconnect(sk, flags); =20 - return sk->sk_prot->connect(sk, uaddr, addr_len); + return sk->sk_prot->connect(sk, (struct sockaddr *)uaddr, addr_len); } =20 static int ieee802154_dev_ioctl(struct sock *sk, struct ifreq __user *arg, diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index e70126c5ae44..3421a2d30845 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -567,7 +567,7 @@ int __inet_bind(struct sock *sk, struct sockaddr *uaddr= , int addr_len, return err; } =20 -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) { struct sock *sk =3D sock->sk; @@ -584,14 +584,14 @@ int inet_dgram_connect(struct socket *sock, struct so= ckaddr *uaddr, return prot->disconnect(sk, flags); =20 if (BPF_CGROUP_PRE_CONNECT_ENABLED(sk)) { - err =3D prot->pre_connect(sk, uaddr, addr_len); + err =3D prot->pre_connect(sk, (struct sockaddr *)uaddr, addr_len); if (err) return err; } =20 if (data_race(!inet_sk(sk)->inet_num) && inet_autobind(sk)) return -EAGAIN; - return prot->connect(sk, uaddr, addr_len); + return prot->connect(sk, (struct sockaddr *)uaddr, addr_len); } EXPORT_SYMBOL(inet_dgram_connect); =20 @@ -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 * TCP 'magic' in here. */ -int __inet_stream_connect(struct socket *sock, struct sockaddr *uaddr, +int __inet_stream_connect(struct socket *sock, struct sockaddr_unsized *ua= ddr, int addr_len, int flags, int is_sendmsg) { struct sock *sk =3D sock->sk; @@ -671,12 +671,12 @@ int __inet_stream_connect(struct socket *sock, struct= sockaddr *uaddr, goto out; =20 if (BPF_CGROUP_PRE_CONNECT_ENABLED(sk)) { - err =3D sk->sk_prot->pre_connect(sk, uaddr, addr_len); + err =3D sk->sk_prot->pre_connect(sk, (struct sockaddr *)uaddr, addr_len= ); if (err) goto out; } =20 - err =3D sk->sk_prot->connect(sk, uaddr, addr_len); + err =3D sk->sk_prot->connect(sk, (struct sockaddr *)uaddr, addr_len); if (err < 0) goto out; =20 @@ -741,7 +741,7 @@ int __inet_stream_connect(struct socket *sock, struct s= ockaddr *uaddr, } EXPORT_SYMBOL(__inet_stream_connect); =20 -int inet_stream_connect(struct socket *sock, struct sockaddr *uaddr, +int inet_stream_connect(struct socket *sock, struct sockaddr_unsized *uadd= r, int addr_len, int flags) { int err; diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 8a18aeca7ab0..8f089f92522b 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -1062,7 +1062,7 @@ int tcp_sendmsg_fastopen(struct sock *sk, struct msgh= dr *msg, int *copied, } } flags =3D (msg->msg_flags & MSG_DONTWAIT) ? O_NONBLOCK : 0; - err =3D __inet_stream_connect(sk->sk_socket, uaddr, + err =3D __inet_stream_connect(sk->sk_socket, (struct sockaddr_unsized *)u= addr, msg->msg_namelen, flags, 1); /* fastopen_req could already be freed in __inet_stream_connect * if the connection times out or gets rst diff --git a/net/ipv4/udp_tunnel_core.c b/net/ipv4/udp_tunnel_core.c index 11e5a88c923d..b1f667c52cb2 100644 --- a/net/ipv4/udp_tunnel_core.c +++ b/net/ipv4/udp_tunnel_core.c @@ -38,7 +38,7 @@ int udp_sock_create4(struct net *net, struct udp_port_cfg= *cfg, udp_addr.sin_family =3D AF_INET; udp_addr.sin_addr =3D cfg->peer_ip; udp_addr.sin_port =3D cfg->peer_udp_port; - err =3D kernel_connect(sock, (struct sockaddr *)&udp_addr, + err =3D kernel_connect(sock, (struct sockaddr_unsized *)&udp_addr, sizeof(udp_addr), 0); if (err < 0) goto error; diff --git a/net/ipv6/ip6_udp_tunnel.c b/net/ipv6/ip6_udp_tunnel.c index b0d9286b33c8..cef3e0210744 100644 --- a/net/ipv6/ip6_udp_tunnel.c +++ b/net/ipv6/ip6_udp_tunnel.c @@ -52,7 +52,7 @@ int udp_sock_create6(struct net *net, struct udp_port_cfg= *cfg, sizeof(udp6_addr.sin6_addr)); udp6_addr.sin6_port =3D cfg->peer_udp_port; err =3D kernel_connect(sock, - (struct sockaddr *)&udp6_addr, + (struct sockaddr_unsized *)&udp6_addr, sizeof(udp6_addr), 0); } if (err < 0) diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c index 894c53317e92..57467037014a 100644 --- a/net/iucv/af_iucv.c +++ b/net/iucv/af_iucv.c @@ -667,7 +667,7 @@ static int iucv_sock_autobind(struct sock *sk) return err; } =20 -static int afiucv_path_connect(struct socket *sock, struct sockaddr *addr) +static int afiucv_path_connect(struct socket *sock, struct sockaddr_unsize= d *addr) { DECLARE_SOCKADDR(struct sockaddr_iucv *, sa, addr); struct sock *sk =3D sock->sk; @@ -713,7 +713,7 @@ static int afiucv_path_connect(struct socket *sock, str= uct sockaddr *addr) } =20 /* 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) { DECLARE_SOCKADDR(struct sockaddr_iucv *, sa, addr); diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c index 4b5e372a5cd4..c4f4a57cd67c 100644 --- a/net/l2tp/l2tp_core.c +++ b/net/l2tp/l2tp_core.c @@ -1513,7 +1513,7 @@ static int l2tp_tunnel_sock_create(struct net *net, sizeof(ip6_addr.l2tp_addr)); ip6_addr.l2tp_conn_id =3D peer_tunnel_id; err =3D kernel_connect(sock, - (struct sockaddr *)&ip6_addr, + (struct sockaddr_unsized *)&ip6_addr, sizeof(ip6_addr), 0); if (err < 0) goto out; @@ -1538,7 +1538,7 @@ static int l2tp_tunnel_sock_create(struct net *net, ip_addr.l2tp_family =3D AF_INET; ip_addr.l2tp_addr =3D cfg->peer_ip; ip_addr.l2tp_conn_id =3D peer_tunnel_id; - err =3D kernel_connect(sock, (struct sockaddr *)&ip_addr, + err =3D kernel_connect(sock, (struct sockaddr_unsized *)&ip_addr, sizeof(ip_addr), 0); if (err < 0) goto out; diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c index 5e12e7ce17d8..ae4543d5597b 100644 --- a/net/l2tp/l2tp_ppp.c +++ b/net/l2tp/l2tp_ppp.c @@ -684,7 +684,7 @@ static struct l2tp_tunnel *pppol2tp_tunnel_get(struct n= et *net, =20 /* connect() handler. Attach a PPPoX socket to a tunnel UDP socket */ -static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservadd= r, +static int pppol2tp_connect(struct socket *sock, struct sockaddr_unsized *= uservaddr, int sockaddr_len, int flags) { struct sock *sk =3D sock->sk; diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c index e5bb0c0d708c..59d593bb5d18 100644 --- a/net/llc/af_llc.c +++ b/net/llc/af_llc.c @@ -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. * 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 *ua= ddr, int addrlen, int flags) { struct sock *sk =3D sock->sk; diff --git a/net/mctp/af_mctp.c b/net/mctp/af_mctp.c index 5b1ef50637b7..209a963112e3 100644 --- a/net/mctp/af_mctp.c +++ b/net/mctp/af_mctp.c @@ -128,7 +128,7 @@ static int mctp_bind(struct socket *sock, struct sockad= dr_unsized *addr, int add /* Used to set a specific peer prior to bind. Not used for outbound * 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) { struct sock *sk =3D sock->sk; diff --git a/net/mctp/test/utils.c b/net/mctp/test/utils.c index 953d41902771..35f6be814567 100644 --- a/net/mctp/test/utils.c +++ b/net/mctp/test/utils.c @@ -279,7 +279,7 @@ void mctp_test_bind_run(struct kunit *test, addr.smctp_addr.s_addr =3D setup->peer_addr; /* connect() type must match bind() type */ addr.smctp_type =3D setup->bind_type; - rc =3D kernel_connect(*sock, (struct sockaddr *)&addr, + rc =3D kernel_connect(*sock, (struct sockaddr_unsized *)&addr, sizeof(addr), 0); KUNIT_EXPECT_EQ(test, rc, 0); } @@ -292,5 +292,6 @@ void mctp_test_bind_run(struct kunit *test, addr.smctp_type =3D setup->bind_type; =20 *ret_bind_errno =3D - kernel_bind(*sock, (struct sockaddr *)&addr, sizeof(addr)); + kernel_bind(*sock, (struct sockaddr_unsized *)&addr, + sizeof(addr)); } diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index d90237bf433c..30961b3d1702 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1680,7 +1680,7 @@ int __mptcp_subflow_connect(struct sock *sk, const st= ruct mptcp_pm_local *local, =20 sock_hold(ssk); list_add_tail(&subflow->node, &msk->conn_list); - err =3D kernel_connect(sf, (struct sockaddr *)&addr, addrlen, O_NONBLOCK); + err =3D kernel_connect(sf, (struct sockaddr_unsized *)&addr, addrlen, O_N= ONBLOCK); if (err && err !=3D -EINPROGRESS) { MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_JOINSYNTXCONNECTERR); pr_debug("msk=3D%p local=3D%d remote=3D%d connect error: %d\n", diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_syn= c.c index d8c089ef387c..5a0c6f42bd8f 100644 --- a/net/netfilter/ipvs/ip_vs_sync.c +++ b/net/netfilter/ipvs/ip_vs_sync.c @@ -1501,7 +1501,7 @@ static int make_send_sock(struct netns_ipvs *ipvs, in= t id, } =20 get_mcast_sockaddr(&mcast_addr, &salen, &ipvs->mcfg, id); - result =3D kernel_connect(sock, (struct sockaddr *)&mcast_addr, + result =3D kernel_connect(sock, (struct sockaddr_unsized *)&mcast_addr, salen, 0); if (result < 0) { pr_err("Error connecting to the multicast addr\n"); diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index b4110994776d..ee95b2c4f0c3 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -1056,7 +1056,7 @@ static int netlink_bind(struct socket *sock, struct s= ockaddr_unsized *addr, return err; } =20 -static int netlink_connect(struct socket *sock, struct sockaddr *addr, +static int netlink_connect(struct socket *sock, struct sockaddr_unsized *a= ddr, int alen, int flags) { int err =3D 0; diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c index 33468124d53d..5ed1a71ceec1 100644 --- a/net/netrom/af_netrom.c +++ b/net/netrom/af_netrom.c @@ -632,8 +632,8 @@ static int nr_bind(struct socket *sock, struct sockaddr= _unsized *uaddr, int addr return 0; } =20 -static int nr_connect(struct socket *sock, struct sockaddr *uaddr, - int addr_len, int flags) +static int nr_connect(struct socket *sock, struct sockaddr_unsized *uaddr, + int addr_len, int flags) { struct sock *sk =3D sock->sk; struct nr_sock *nr =3D nr_sk(sk); diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c index 26e6ceb48a82..f1be1e84f665 100644 --- a/net/nfc/llcp_sock.c +++ b/net/nfc/llcp_sock.c @@ -648,7 +648,7 @@ static int llcp_sock_release(struct socket *sock) return err; } =20 -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) { struct sock *sk =3D sock->sk; diff --git a/net/nfc/rawsock.c b/net/nfc/rawsock.c index 5125392bb68e..b049022399ae 100644 --- a/net/nfc/rawsock.c +++ b/net/nfc/rawsock.c @@ -73,7 +73,7 @@ static int rawsock_release(struct socket *sock) return 0; } =20 -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) { struct sock *sk =3D sock->sk; diff --git a/net/phonet/socket.c b/net/phonet/socket.c index 478b02647733..9391378083a4 100644 --- a/net/phonet/socket.c +++ b/net/phonet/socket.c @@ -214,8 +214,8 @@ static int pn_socket_autobind(struct socket *sock) return 0; /* socket was already bound */ } =20 -static int pn_socket_connect(struct socket *sock, struct sockaddr *addr, - int len, int flags) +static int pn_socket_connect(struct socket *sock, struct sockaddr_unsized = *addr, + int len, int flags) { struct sock *sk =3D sock->sk; struct pn_sock *pn =3D pn_sk(sk); @@ -252,7 +252,7 @@ static int pn_socket_connect(struct socket *sock, struc= t sockaddr *addr, pn->resource =3D pn_sockaddr_get_resource(spn); sock->state =3D SS_CONNECTING; =20 - err =3D sk->sk_prot->connect(sk, addr, len); + err =3D sk->sk_prot->connect(sk, (struct sockaddr *)addr, len); if (err) { sock->state =3D SS_UNCONNECTED; pn->dobject =3D 0; diff --git a/net/qrtr/af_qrtr.c b/net/qrtr/af_qrtr.c index 00bd3dd9f0f9..dab839f61ee9 100644 --- a/net/qrtr/af_qrtr.c +++ b/net/qrtr/af_qrtr.c @@ -1084,7 +1084,7 @@ static int qrtr_recvmsg(struct socket *sock, struct m= sghdr *msg, return rc; } =20 -static int qrtr_connect(struct socket *sock, struct sockaddr *saddr, +static int qrtr_connect(struct socket *sock, struct sockaddr_unsized *sadd= r, int len, int flags) { DECLARE_SOCKADDR(struct sockaddr_qrtr *, addr, saddr); diff --git a/net/rds/af_rds.c b/net/rds/af_rds.c index 4a7217fbeab6..b396c673dfaf 100644 --- a/net/rds/af_rds.c +++ b/net/rds/af_rds.c @@ -533,7 +533,7 @@ static int rds_getsockopt(struct socket *sock, int leve= l, int optname, =20 } =20 -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) { struct sock *sk =3D sock->sk; diff --git a/net/rds/tcp_connect.c b/net/rds/tcp_connect.c index 1eff3b03ab77..92891b0d224d 100644 --- a/net/rds/tcp_connect.c +++ b/net/rds/tcp_connect.c @@ -173,7 +173,7 @@ int rds_tcp_conn_path_connect(struct rds_conn_path *cp) * own the socket */ rds_tcp_set_callbacks(sock, cp); - ret =3D kernel_connect(sock, addr, addrlen, O_NONBLOCK); + ret =3D kernel_connect(sock, (struct sockaddr_unsized *)addr, addrlen, O_= NONBLOCK); =20 rdsdebug("connect to address %pI6c returned %d\n", &conn->c_faddr, ret); if (ret =3D=3D -EINPROGRESS) diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c index 47369eab5aec..fd67494f2815 100644 --- a/net/rose/af_rose.c +++ b/net/rose/af_rose.c @@ -765,7 +765,8 @@ static int rose_bind(struct socket *sock, struct sockad= dr_unsized *uaddr, int ad return err; } =20 -static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int a= ddr_len, int flags) +static int rose_connect(struct socket *sock, struct sockaddr_unsized *uadd= r, int addr_len, + int flags) { struct sock *sk =3D sock->sk; struct rose_sock *rose =3D rose_sk(sk); diff --git a/net/rxrpc/af_rxrpc.c b/net/rxrpc/af_rxrpc.c index 245f37a74394..0c2c68c4b07e 100644 --- a/net/rxrpc/af_rxrpc.c +++ b/net/rxrpc/af_rxrpc.c @@ -481,7 +481,7 @@ EXPORT_SYMBOL(rxrpc_kernel_set_notifications); * - this just targets it at a specific destination; no actual connection * negotiation takes place */ -static int rxrpc_connect(struct socket *sock, struct sockaddr *addr, +static int rxrpc_connect(struct socket *sock, struct sockaddr_unsized *add= r, int addr_len, int flags) { struct sockaddr_rxrpc *srx =3D (struct sockaddr_rxrpc *)addr; diff --git a/net/sctp/socket.c b/net/sctp/socket.c index ed8293a34240..a3d7607c1c7a 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -4822,7 +4822,7 @@ static int sctp_connect(struct sock *sk, struct socka= ddr *addr, return err; } =20 -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) { if (addr_len < sizeof(uaddr->sa_family)) @@ -4831,7 +4831,7 @@ int sctp_inet_connect(struct socket *sock, struct soc= kaddr *uaddr, if (uaddr->sa_family =3D=3D AF_UNSPEC) return -EOPNOTSUPP; =20 - return sctp_connect(sock->sk, uaddr, addr_len, flags); + return sctp_connect(sock->sk, (struct sockaddr *)uaddr, addr_len, flags); } =20 /* Only called when shutdown a listening SCTP socket. */ diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c index 60cc812ce633..367eb97841f6 100644 --- a/net/smc/af_smc.c +++ b/net/smc/af_smc.c @@ -1642,7 +1642,7 @@ static void smc_connect_work(struct work_struct *work) release_sock(&smc->sk); } =20 -int smc_connect(struct socket *sock, struct sockaddr *addr, +int smc_connect(struct socket *sock, struct sockaddr_unsized *addr, int alen, int flags) { struct sock *sk =3D sock->sk; @@ -1694,7 +1694,7 @@ int smc_connect(struct socket *sock, struct sockaddr = *addr, rc =3D -EALREADY; goto out; } - rc =3D kernel_connect(smc->clcsock, addr, alen, flags); + rc =3D kernel_connect(smc->clcsock, (struct sockaddr_unsized *)addr, alen= , flags); if (rc && rc !=3D -EINPROGRESS) goto out; =20 diff --git a/net/socket.c b/net/socket.c index aaefb2e519a7..101a7ed574e7 100644 --- a/net/socket.c +++ b/net/socket.c @@ -2099,8 +2099,8 @@ int __sys_connect_file(struct file *file, struct sock= addr_storage *address, if (err) goto out; =20 - err =3D READ_ONCE(sock->ops)->connect(sock, (struct sockaddr *)address, - addrlen, sock->file->f_flags | file_flags); + err =3D READ_ONCE(sock->ops)->connect(sock, (struct sockaddr_unsized *)ad= dress, + addrlen, sock->file->f_flags | file_flags); out: return err; } @@ -3662,14 +3662,14 @@ EXPORT_SYMBOL(kernel_accept); * Returns 0 or an error code. */ =20 -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) { struct sockaddr_storage address; =20 memcpy(&address, addr, addrlen); =20 - return READ_ONCE(sock->ops)->connect(sock, (struct sockaddr *)&address, + return READ_ONCE(sock->ops)->connect(sock, (struct sockaddr_unsized *)&ad= dress, addrlen, flags); } EXPORT_SYMBOL(kernel_connect); diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index 318ee24ad900..58442ae1c2da 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -1474,7 +1474,7 @@ static int rpc_sockname(struct net *net, struct socka= ddr *sap, size_t salen, goto out_release; } =20 - err =3D kernel_connect(sock, sap, salen, 0); + err =3D kernel_connect(sock, (struct sockaddr_unsized *)sap, salen, 0); if (err < 0) { dprintk("RPC: can't connect UDP socket (%d)\n", err); goto out_release; diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index 95732a45b059..2e1fe6013361 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -2005,7 +2005,7 @@ static int xs_local_finish_connecting(struct rpc_xprt= *xprt, =20 xs_stream_start_connect(transport); =20 - return kernel_connect(sock, xs_addr(xprt), xprt->addrlen, 0); + return kernel_connect(sock, (struct sockaddr_unsized *)xs_addr(xprt), xpr= t->addrlen, 0); } =20 /** @@ -2405,7 +2405,8 @@ static int xs_tcp_finish_connecting(struct rpc_xprt *= xprt, struct socket *sock) =20 /* Tell the socket layer to start connecting... */ 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); } =20 /** diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 14f75ee88ddf..767f943e331d 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c @@ -2565,7 +2565,7 @@ static bool tipc_sockaddr_is_sane(struct sockaddr_tip= c *addr) * * 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) { struct sock *sk =3D sock->sk; diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 8e92d63fa95b..2743e68d129a 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -855,7 +855,7 @@ static int unix_listen(struct socket *sock, int backlog) =20 static int unix_release(struct socket *); 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); static int unix_socketpair(struct socket *, struct socket *); static int unix_accept(struct socket *, struct socket *, struct proto_acce= pt_arg *arg); @@ -877,7 +877,7 @@ static int unix_dgram_sendmsg(struct socket *, struct m= sghdr *, size_t); static int unix_dgram_recvmsg(struct socket *, struct msghdr *, size_t, in= t); 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_act= or); -static int unix_dgram_connect(struct socket *, struct sockaddr *, +static int unix_dgram_connect(struct socket *, struct sockaddr_unsized *, int, int); static int unix_seqpacket_sendmsg(struct socket *, struct msghdr *, size_t= ); static int unix_seqpacket_recvmsg(struct socket *, struct msghdr *, size_t, @@ -1523,7 +1523,7 @@ static void unix_state_double_unlock(struct sock *sk1= , struct sock *sk2) unix_state_unlock(sk2); } =20 -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) { struct sockaddr_un *sunaddr =3D (struct sockaddr_un *)addr; @@ -1642,7 +1642,7 @@ static long unix_wait_for_peer(struct sock *other, lo= ng timeo) return timeo; } =20 -static int unix_stream_connect(struct socket *sock, struct sockaddr *uaddr, +static int unix_stream_connect(struct socket *sock, struct sockaddr_unsize= d *uaddr, int addr_len, int flags) { struct sockaddr_un *sunaddr =3D (struct sockaddr_un *)uaddr; diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c index fca26e279845..12e57ca93a04 100644 --- a/net/vmw_vsock/af_vsock.c +++ b/net/vmw_vsock/af_vsock.c @@ -995,7 +995,7 @@ vsock_bind(struct socket *sock, struct sockaddr_unsized= *addr, int addr_len) =20 sk =3D sock->sk; =20 - if (vsock_addr_cast((struct sockaddr *)addr, addr_len, &vm_addr) !=3D 0) + if (vsock_addr_cast(addr, addr_len, &vm_addr) !=3D 0) return -EINVAL; =20 lock_sock(sk); @@ -1328,7 +1328,7 @@ static int vsock_dgram_sendmsg(struct socket *sock, s= truct msghdr *msg, } =20 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; struct sock *sk; @@ -1528,7 +1528,7 @@ static void vsock_connect_timeout(struct work_struct = *work) sock_put(sk); } =20 -static int vsock_connect(struct socket *sock, struct sockaddr *addr, +static int vsock_connect(struct socket *sock, struct sockaddr_unsized *add= r, int addr_len, int flags) { int err; diff --git a/net/vmw_vsock/vsock_addr.c b/net/vmw_vsock/vsock_addr.c index 223b9660a759..a986aa6fff9b 100644 --- a/net/vmw_vsock/vsock_addr.c +++ b/net/vmw_vsock/vsock_addr.c @@ -57,7 +57,7 @@ bool vsock_addr_equals_addr(const struct sockaddr_vm *add= r, } EXPORT_SYMBOL_GPL(vsock_addr_equals_addr); =20 -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) { if (len < sizeof(**out_addr)) diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c index ca8006d8f792..af8762b24039 100644 --- a/net/x25/af_x25.c +++ b/net/x25/af_x25.c @@ -743,7 +743,7 @@ static int x25_wait_for_connection_establishment(struct= sock *sk) return rc; } =20 -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) { struct sock *sk =3D sock->sk; diff --git a/samples/qmi/qmi_sample_client.c b/samples/qmi/qmi_sample_clien= t.c index b27d861f354f..d1814582319b 100644 --- a/samples/qmi/qmi_sample_client.c +++ b/samples/qmi/qmi_sample_client.c @@ -468,7 +468,7 @@ static int qmi_sample_probe(struct platform_device *pde= v) return ret; =20 sq =3D dev_get_platdata(&pdev->dev); - ret =3D kernel_connect(sample->qmi.sock, (struct sockaddr *)sq, + ret =3D kernel_connect(sample->qmi.sock, (struct sockaddr_unsized *)sq, sizeof(*sq), 0); if (ret < 0) { pr_err("failed to connect to remote service port\n"); diff --git a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c b/tools/t= esting/selftests/bpf/test_kmods/bpf_testmod.c index 0497b5dea25c..8eeebaa951f0 100644 --- a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c +++ b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c @@ -900,7 +900,7 @@ __bpf_kfunc int bpf_kfunc_call_kernel_connect(struct ad= dr_args *args) goto out; } =20 - err =3D kernel_connect(sock, (struct sockaddr *)&args->addr, + err =3D kernel_connect(sock, (struct sockaddr_unsized *)&args->addr, args->addrlen, 0); out: mutex_unlock(&sock_lock); --=20 2.34.1 From nobody Sat Feb 7 21:17:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C3CB631A062; Wed, 29 Oct 2025 21:44:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761774268; cv=none; b=DSgBGQWPW9u4f7Y6WbiJN5lXAYFnOkIqXSqAOAQ95dJIjftpAfOIRa7SkSBCuFNjM0gf+8pfqPX6k5In/J/PPDTfxmHx6zggfCx+uvXvF4qh+uAZGrUSln9YanCaIHe8/5N28KYb8sI5bB8oExSTiLNM1HfkljOPMan+99vEIlU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761774268; c=relaxed/simple; bh=df1PiIrJZqCah2hLW/KzqMjbXuVjxXuE5Xm3CRH5CeU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=f8icR42ksyYxyRL/nfDAqRR8Rx4QNFwPxuPT/BuIN41YhHefsiQzlPwhgAhVrXGM+VTD5wVY7TDbjhSFJciMMuEfGJEI1nrkqywY3EEXB98LNJ3hSxoXsk34ey2nWmcHXULHGrbENx2Rbqvv1Evif6+L5cs66VDDREpDNH1v/R0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZV4qlgXt; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZV4qlgXt" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 62A74C4CEF8; Wed, 29 Oct 2025 21:44:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761774268; bh=df1PiIrJZqCah2hLW/KzqMjbXuVjxXuE5Xm3CRH5CeU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZV4qlgXtKqoZdqSqqfZpvWI3yqRMfg/yYkiVB4OmMsgwGCci/Q3stmo7n/bdxo+TH niIReZTuF2jmZSsY/+lDPgwRyJyo+H4RoULZ2rDHlEe3R5BJl3B2OAWhIN11G/uJgw x4hpAUMieHRcyiRv9NoC6zX7QMNXtZnll24IgNSt/g7tuPxmkx54L/GxJEmRjj8hLZ c7tuZ9IooZM8pUzvHcE5OEEe7p+roJcAMeKKN6jFZ40ceK3fiS1fFxkVDa8B9dSi9Q 9wVjoZvBT+KNK5/M9b9fRS58Z9OZhXKdy1kEWzfXX7NF5Im45krBv7NwOVin/+gzFk JPkLFR5Ts4+3Q== From: Kees Cook To: Paolo Abeni Cc: Kees Cook , Jakub Kicinski , "Gustavo A. R. Silva" , Alexei Starovoitov , Daniel Borkmann , John Fastabend , "David S. Miller" , Eric Dumazet , Simon Horman , Kuniyuki Iwashima , Willem de Bruijn , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [net-next PATCH v4 3/7] net: Remove struct sockaddr from net.h Date: Wed, 29 Oct 2025 14:44:00 -0700 Message-Id: <20251029214428.2467496-3-kees@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251029214355.work.602-kees@kernel.org> References: <20251029214355.work.602-kees@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=494; i=kees@kernel.org; h=from:subject; bh=df1PiIrJZqCah2hLW/KzqMjbXuVjxXuE5Xm3CRH5CeU=; b=owGbwMvMwCVmps19z/KJym7G02pJDJlMXYvKt15hP+nyuGXXnfX/LQ4+NOr9vOe/w6Te6vrl+ 95P3d7d3VHKwiDGxSArpsgSZOce5+Lxtj3cfa4izBxWJpAhDFycAjCR37mMDJNm1M5XPH7+hdDH PkslI/PnNRNsy9/HqpjJTDm1g5nr1AlGhpXftv0p7OgvkTHacnq6SNRTkZADrYtn1tStr817WyO wjxEA X-Developer-Key: i=kees@kernel.org; a=openpgp; fpr=A5C3F68F229DD60F723E6E138972F4DFDC6DC026 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Now that struct sockaddr is no longer used by net.h, remove it. Signed-off-by: Kees Cook --- include/linux/net.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/linux/net.h b/include/linux/net.h index db6bc997ca5b..f58b38ab37f8 100644 --- a/include/linux/net.h +++ b/include/linux/net.h @@ -148,7 +148,6 @@ typedef struct { =20 struct vm_area_struct; struct page; -struct sockaddr; struct msghdr; struct module; struct sk_buff; --=20 2.34.1 From nobody Sat Feb 7 21:17:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C3C4131A05E; Wed, 29 Oct 2025 21:44:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761774268; cv=none; b=HyZn6psqe1zX5qFYNIdYLI9JTEr295GrJE/SkduxbBZD5f2prLXXAFjRySC5BXugJZp1WfDAiDJYDml1nyh/k75NWTxNbVmanhjYeMgwfHwtY2Wab/SxDsmRv/MimX29k3v/ZvIxWhtkF7+FJ3TM3dhM0V43v2pgfZcVLyA1QNw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761774268; c=relaxed/simple; bh=NlNDSA05zWRdRcwbKy+PdJuFtlX8ALadsYS0rvlQODM=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=e8sblloCSwEW2hXJQH+Hd+48VjzxtYIQ/Ges0iEKLcVFF3G05bY2ILt7grhKKoq2n5pDNGw4+k8CsB06VG7R/XCr3q5T7O/WJlC0quwYmyr0RiPcoRwrJSpPlNpXkNGePOw4f5ttAN5GyYWgXC2+UIQvxQkn+a4gj9YnHmCm4Jw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mx/jlpR8; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mx/jlpR8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7BEF4C116D0; Wed, 29 Oct 2025 21:44:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761774268; bh=NlNDSA05zWRdRcwbKy+PdJuFtlX8ALadsYS0rvlQODM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mx/jlpR84TRG/p9BA0YM7vC+sAnJzBSd5/gJJD1iVLptFB1xo7tKqGIWso5XySETv mw5wPYvyj83z2jcv+wd+33QuaZntPhdIJ2/P+RWQIDdrsMAkLSRlyJJXJ9qE/fE2yo lzdqilgu6LvewO59uwSpaivmbFxmmBidtPb2yf1rkOeGLuAgG4dASUr2Oq4bE7A3RD ZE/356i7smIf7aIKhVisw6aG5oyuhBbYgI0JTpTfWLqoUZOOZBvIzxNJB9f+cve01t Lm821uCVXA5FX1sVBnrXaEsI9qWEK8DBQnngqJlEcTuMyRA3RtX9IlWXrwUrhDeyd1 Cp3sCjmA8cGfA== From: Kees Cook To: Paolo Abeni Cc: Kees Cook , Jakub Kicinski , "Gustavo A. R. Silva" , Alexei Starovoitov , Daniel Borkmann , John Fastabend , "David S. Miller" , Eric Dumazet , Simon Horman , Kuniyuki Iwashima , Willem de Bruijn , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [net-next PATCH v4 4/7] net: Convert proto callbacks from sockaddr to sockaddr_unsized Date: Wed, 29 Oct 2025 14:44:01 -0700 Message-Id: <20251029214428.2467496-4-kees@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251029214355.work.602-kees@kernel.org> References: <20251029214355.work.602-kees@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=33000; i=kees@kernel.org; h=from:subject; bh=NlNDSA05zWRdRcwbKy+PdJuFtlX8ALadsYS0rvlQODM=; b=owGbwMvMwCVmps19z/KJym7G02pJDJlMXYuqJbU5+l9bnrZ1eejzNIknrtl79TwLy96Lc33kT 79jVizpKGVhEONikBVTZAmyc49z8XjbHu4+VxFmDisTyBAGLk4BmMhsQUaGfSV5hvtdnBQWny95 WypS/qR8vtJav0srcrm1rVaKq0hFMDJMl30meD/Xb9qvwG1mzEIvbxREJXOG3nvWb3DiU+cmv6s 8AA== X-Developer-Key: i=kees@kernel.org; a=openpgp; fpr=A5C3F68F229DD60F723E6E138972F4DFDC6DC026 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert struct proto pre_connect(), connect(), bind(), and bind_add() callback function prototypes from struct sockaddr to struct sockaddr_unsize= d. 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 --- include/net/inet_common.h | 5 ++--- include/net/ip.h | 4 ++-- include/net/ipv6.h | 8 ++++---- include/net/ipv6_stubs.h | 2 +- include/net/ping.h | 2 +- include/net/sock.h | 10 +++++----- include/net/tcp.h | 2 +- include/net/udp.h | 2 +- fs/dlm/lowcomms.c | 4 ++-- net/core/filter.c | 5 +++-- net/core/sock.c | 2 +- net/ieee802154/socket.c | 12 ++++++------ net/ipv4/af_inet.c | 14 +++++++------- net/ipv4/datagram.c | 4 ++-- net/ipv4/ping.c | 8 ++++---- net/ipv4/raw.c | 3 ++- net/ipv4/tcp_ipv4.c | 4 ++-- net/ipv4/udp.c | 6 ++++-- net/ipv6/af_inet6.c | 6 +++--- net/ipv6/datagram.c | 8 ++++---- net/ipv6/ping.c | 2 +- net/ipv6/raw.c | 3 ++- net/ipv6/tcp_ipv6.c | 6 +++--- net/ipv6/udp.c | 5 +++-- net/l2tp/l2tp_ip.c | 6 ++++-- net/l2tp/l2tp_ip6.c | 5 +++-- net/mptcp/pm_kernel.c | 4 ++-- net/mptcp/protocol.c | 7 ++++--- net/phonet/pep.c | 3 ++- net/phonet/socket.c | 4 ++-- net/sctp/socket.c | 9 +++++---- 31 files changed, 88 insertions(+), 77 deletions(-) diff --git a/include/net/inet_common.h b/include/net/inet_common.h index ebafd96912bb..5dd2bf24449e 100644 --- a/include/net/inet_common.h +++ b/include/net/inet_common.h @@ -19,7 +19,6 @@ struct msghdr; struct net; struct page; struct sock; -struct sockaddr; struct socket; =20 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 add= r_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); diff --git a/include/net/ip.h b/include/net/ip.h index 380afb691c41..69d5cef46004 100644 --- a/include/net/ip.h +++ b/include/net/ip.h @@ -261,8 +261,8 @@ static inline u8 ip_sendmsg_scope(const struct inet_soc= k *inet, } =20 /* datagram.c */ -int __ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int ad= dr_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); =20 void ip4_datagram_release_cb(struct sock *sk); =20 diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 2188bad9a687..74fbf1ad8065 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h @@ -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); =20 -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, i= nt 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 ad= dr_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 add= r_len); int inet6_getname(struct socket *sock, struct sockaddr *uaddr, int peer); int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg); diff --git a/include/net/ipv6_stubs.h b/include/net/ipv6_stubs.h index 8a3465c8c2c5..d3013e721b14 100644 --- a/include/net/ipv6_stubs.h +++ b/include/net/ipv6_stubs.h @@ -80,7 +80,7 @@ extern const struct ipv6_stub *ipv6_stub __read_mostly; =20 /* 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 ad= dr_len, u32 flags); struct sock *(*udp6_lib_lookup)(const struct net *net, const struct in6_addr *saddr, __be16 sport, diff --git a/include/net/ping.h b/include/net/ping.h index 9634b8800814..05bfd594a64c 100644 --- a/include/net/ping.h +++ b/include/net/ping.h @@ -58,7 +58,7 @@ void ping_unhash(struct sock *sk); =20 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_l= en); 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 *); diff --git a/include/net/sock.h b/include/net/sock.h index 3e672a92560b..7f707df66b53 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -1260,10 +1260,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); =20 @@ -1292,9 +1292,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); =20 int (*backlog_rcv) (struct sock *sk, struct sk_buff *skb); @@ -3085,7 +3085,7 @@ void sock_set_reuseaddr(struct sock *sk); void sock_set_reuseport(struct sock *sk); void sock_set_sndtimeo(struct sock *sk, s64 secs); =20 -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); =20 int sock_get_timeout(long timeo, void *optval, bool old_timeval); int sock_copy_user_timeval(struct __kernel_sock_timeval *tv, diff --git a/include/net/tcp.h b/include/net/tcp.h index 5ca230ed526a..d5f07571f0f8 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -530,7 +530,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 ad= dr_len); int tcp_connect(struct sock *sk); enum tcp_synack_type { TCP_SYNACK_NORMAL, diff --git a/include/net/udp.h b/include/net/udp.h index cffedb3e40f2..a061d1b22ddc 100644 --- a/include/net/udp.h +++ b/include/net/udp.h @@ -424,7 +424,7 @@ void udp4_hwcsum(struct sk_buff *skb, __be32 src, __be3= 2 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 a= ddr_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= ); diff --git a/fs/dlm/lowcomms.c b/fs/dlm/lowcomms.c index f832dafdaca8..b3958008ba3f 100644 --- a/fs/dlm/lowcomms.c +++ b/fs/dlm/lowcomms.c @@ -1126,7 +1126,7 @@ static void writequeue_entry_complete(struct writeque= ue_entry *e, int completed) static int sctp_bind_addrs(struct socket *sock, __be16 port) { struct sockaddr_storage localaddr; - struct sockaddr *addr =3D (struct sockaddr *)&localaddr; + struct sockaddr_unsized *addr =3D (struct sockaddr_unsized *)&localaddr; int i, addr_len, result =3D 0; =20 for (i =3D 0; i < dlm_local_count; i++) { @@ -1134,7 +1134,7 @@ static int sctp_bind_addrs(struct socket *sock, __be1= 6 port) make_sockaddr(&localaddr, port, &addr_len); =20 if (!i) - result =3D kernel_bind(sock, (struct sockaddr_unsized *)addr, addr_len); + result =3D kernel_bind(sock, addr, addr_len); else result =3D sock_bind_add(sock->sk, addr, addr_len); =20 diff --git a/net/core/filter.c b/net/core/filter.c index 76628df1fc82..cf136b444e78 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -5907,7 +5907,7 @@ BPF_CALL_3(bpf_bind, struct bpf_sock_addr_kern *, ctx= , struct sockaddr *, addr, return err; if (((struct sockaddr_in *)addr)->sin_port =3D=3D htons(0)) flags |=3D 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 =3D=3D AF_INET6) { if (addr_len < SIN6_LEN_RFC2133) @@ -5917,7 +5917,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 */ diff --git a/net/core/sock.c b/net/core/sock.c index e6e38b6b6b33..85aa9a431bc2 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -4353,7 +4353,7 @@ bool sk_busy_loop_end(void *p, unsigned long start_ti= me) EXPORT_SYMBOL(sk_busy_loop_end); #endif /* CONFIG_NET_RX_BUSY_POLL */ =20 -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; diff --git a/net/ieee802154/socket.c b/net/ieee802154/socket.c index b93fd85f248a..e542fbe113e7 100644 --- a/net/ieee802154/socket.c +++ b/net/ieee802154/socket.c @@ -102,7 +102,7 @@ static int ieee802154_sock_bind(struct socket *sock, st= ruct sockaddr_unsized *ua struct sock *sk =3D sock->sk; =20 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); =20 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 =3D=3D AF_UNSPEC) return sk->sk_prot->disconnect(sk, flags); =20 - return sk->sk_prot->connect(sk, (struct sockaddr *)uaddr, addr_len); + return sk->sk_prot->connect(sk, uaddr, addr_len); } =20 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); } =20 -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 =3D (struct sockaddr_ieee802154 *)_uadd= r; @@ -227,7 +227,7 @@ static int raw_bind(struct sock *sk, struct sockaddr *_= uaddr, int len) return err; } =20 -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); } =20 -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 =3D (struct sockaddr_ieee802154 *)uaddr; struct ieee802154_addr haddr; @@ -563,7 +563,7 @@ static int dgram_ioctl(struct sock *sk, int cmd, int *k= arg) } =20 /* 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 =3D (struct sockaddr_ieee802154 *)uaddr; diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 3421a2d30845..85aee1b18f89 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -441,7 +441,7 @@ int inet_release(struct socket *sock) } EXPORT_SYMBOL(inet_release); =20 -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 =3D BIND_WITH_LOCK; int err; @@ -466,11 +466,11 @@ int inet_bind_sk(struct sock *sk, struct sockaddr *ua= ddr, int addr_len) =20 int inet_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int add= r_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); =20 -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 =3D (struct sockaddr_in *)uaddr; @@ -584,14 +584,14 @@ int inet_dgram_connect(struct socket *sock, struct so= ckaddr_unsized *uaddr, return prot->disconnect(sk, flags); =20 if (BPF_CGROUP_PRE_CONNECT_ENABLED(sk)) { - err =3D prot->pre_connect(sk, (struct sockaddr *)uaddr, addr_len); + err =3D prot->pre_connect(sk, uaddr, addr_len); if (err) return err; } =20 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); =20 @@ -671,12 +671,12 @@ int __inet_stream_connect(struct socket *sock, struct= sockaddr_unsized *uaddr, goto out; =20 if (BPF_CGROUP_PRE_CONNECT_ENABLED(sk)) { - err =3D sk->sk_prot->pre_connect(sk, (struct sockaddr *)uaddr, addr_len= ); + err =3D sk->sk_prot->pre_connect(sk, uaddr, addr_len); if (err) goto out; } =20 - err =3D sk->sk_prot->connect(sk, (struct sockaddr *)uaddr, addr_len); + err =3D sk->sk_prot->connect(sk, uaddr, addr_len); if (err < 0) goto out; =20 diff --git a/net/ipv4/datagram.c b/net/ipv4/datagram.c index c2b2cda1a7e5..1614593b6d72 100644 --- a/net/ipv4/datagram.c +++ b/net/ipv4/datagram.c @@ -16,7 +16,7 @@ #include #include =20 -int __ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int ad= dr_len) +int __ip4_datagram_connect(struct sock *sk, struct sockaddr_unsized *uaddr= , int addr_len) { struct inet_sock *inet =3D inet_sk(sk); struct sockaddr_in *usin =3D (struct sockaddr_in *) uaddr; @@ -84,7 +84,7 @@ int __ip4_datagram_connect(struct sock *sk, struct sockad= dr *uaddr, int addr_len } EXPORT_SYMBOL(__ip4_datagram_connect); =20 -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; =20 diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c index 5321c5801c64..ad56588107cc 100644 --- a/net/ipv4/ping.c +++ b/net/ipv4/ping.c @@ -286,7 +286,7 @@ void ping_close(struct sock *sk, long timeout) } EXPORT_IPV6_MOD_GPL(ping_close); =20 -static int ping_pre_connect(struct sock *sk, struct sockaddr *uaddr, +static int ping_pre_connect(struct sock *sk, struct sockaddr_unsized *uadd= r, 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 soc= kaddr *uaddr, =20 /* 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 =3D sock_net(sk); if (sk->sk_family =3D=3D AF_INET) { @@ -387,7 +387,7 @@ static int ping_check_bind_addr(struct sock *sk, struct= inet_sock *isk, return 0; } =20 -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 =3D=3D AF_INET) { struct inet_sock *isk =3D inet_sk(sk); @@ -407,7 +407,7 @@ static void ping_set_saddr(struct sock *sk, struct sock= addr *saddr) * Moreover, we don't allow binding to multi- and broadcast addresses. */ =20 -int ping_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) +int ping_bind(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_le= n) { struct inet_sock *isk =3D inet_sk(sk); unsigned short snum; diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index d54ebb7df966..5998c4cc6f47 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c @@ -697,7 +697,8 @@ static void raw_destroy(struct sock *sk) } =20 /* 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 =3D inet_sk(sk); struct sockaddr_in *addr =3D (struct sockaddr_in *) uaddr; diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index b1fcf3e4e1ce..e16039fabfa5 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -205,7 +205,7 @@ int tcp_twsk_unique(struct sock *sk, struct sock *sktw,= void *twp) } EXPORT_IPV6_MOD_GPL(tcp_twsk_unique); =20 -static int tcp_v4_pre_connect(struct sock *sk, struct sockaddr *uaddr, +static int tcp_v4_pre_connect(struct sock *sk, struct sockaddr_unsized *ua= ddr, 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 s= ockaddr *uaddr, } =20 /* 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 ad= dr_len) { struct sockaddr_in *usin =3D (struct sockaddr_in *)uaddr; struct inet_timewait_death_row *tcp_death_row; diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 30dfbf73729d..ffe074cb5865 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -2159,7 +2159,8 @@ int udp_recvmsg(struct sock *sk, struct msghdr *msg, = size_t len, int flags, goto try_again; } =20 -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); =20 -static int udp_connect(struct sock *sk, struct sockaddr *uaddr, int addr_l= en) +static int udp_connect(struct sock *sk, struct sockaddr_unsized *uaddr, + int addr_len) { int res; =20 diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index 0eeb85688b50..d3cf31a89ce3 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c @@ -277,7 +277,7 @@ static int inet6_create(struct net *net, struct socket = *sock, int protocol, goto out; } =20 -static int __inet6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_= len, +static int __inet6_bind(struct sock *sk, struct sockaddr_unsized *uaddr, i= nt addr_len, u32 flags) { struct sockaddr_in6 *addr =3D (struct sockaddr_in6 *)uaddr; @@ -438,7 +438,7 @@ static int __inet6_bind(struct sock *sk, struct sockadd= r *uaddr, int addr_len, goto out; } =20 -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 add= r_len) { u32 flags =3D BIND_WITH_LOCK; const struct proto *prot; @@ -467,7 +467,7 @@ int inet6_bind_sk(struct sock *sk, struct sockaddr *uad= dr, int addr_len) /* bind for INET6 API */ int inet6_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int ad= dr_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); =20 diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c index 33ebe93d80e3..83e03176819c 100644 --- a/net/ipv6/datagram.c +++ b/net/ipv6/datagram.c @@ -138,7 +138,7 @@ void ip6_datagram_release_cb(struct sock *sk) } EXPORT_SYMBOL_GPL(ip6_datagram_release_cb); =20 -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 =3D (struct sockaddr_in6 *) uaddr; @@ -194,7 +194,7 @@ int __ip6_datagram_connect(struct sock *sk, struct sock= addr *uaddr, sin.sin_port =3D usin->sin6_port; =20 err =3D __ip4_datagram_connect(sk, - (struct sockaddr *) &sin, + (struct sockaddr_unsized *)&sin, sizeof(sin)); =20 ipv4_connected: @@ -271,7 +271,7 @@ int __ip6_datagram_connect(struct sock *sk, struct sock= addr *uaddr, } EXPORT_SYMBOL_GPL(__ip6_datagram_connect); =20 -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; =20 @@ -282,7 +282,7 @@ int ip6_datagram_connect(struct sock *sk, struct sockad= dr *uaddr, int addr_len) } EXPORT_SYMBOL_GPL(ip6_datagram_connect); =20 -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); diff --git a/net/ipv6/ping.c b/net/ipv6/ping.c index d7a2cdaa2631..e4afc651731a 100644 --- a/net/ipv6/ping.c +++ b/net/ipv6/ping.c @@ -45,7 +45,7 @@ static int dummy_ipv6_chk_addr(struct net *net, const str= uct in6_addr *addr, return 0; } =20 -static int ping_v6_pre_connect(struct sock *sk, struct sockaddr *uaddr, +static int ping_v6_pre_connect(struct sock *sk, struct sockaddr_unsized *u= addr, int addr_len) { /* This check is replicated from __ip6_datagram_connect() and diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index e369f54844dd..b4cd05dba9b6 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c @@ -214,7 +214,8 @@ bool raw6_local_deliver(struct sk_buff *skb, int nexthd= r) } =20 /* This cleans up af_inet6 a bit. -DaveM */ -static int rawv6_bind(struct sock *sk, struct sockaddr *uaddr, int addr_le= n) +static int rawv6_bind(struct sock *sk, struct sockaddr_unsized *uaddr, + int addr_len) { struct inet_sock *inet =3D inet_sk(sk); struct ipv6_pinfo *np =3D inet6_sk(sk); diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 59c4977a811a..74936757aaba 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -119,7 +119,7 @@ static u32 tcp_v6_init_ts_off(const struct net *net, co= nst struct sk_buff *skb) ipv6_hdr(skb)->saddr.s6_addr32); } =20 -static int tcp_v6_pre_connect(struct sock *sk, struct sockaddr *uaddr, +static int tcp_v6_pre_connect(struct sock *sk, struct sockaddr_unsized *ua= ddr, int addr_len) { /* This check is replicated from tcp_v6_connect() and intended to @@ -134,7 +134,7 @@ static int tcp_v6_pre_connect(struct sock *sk, struct s= ockaddr *uaddr, return BPF_CGROUP_RUN_PROG_INET6_CONNECT(sk, uaddr, &addr_len); } =20 -static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, +static int tcp_v6_connect(struct sock *sk, struct sockaddr_unsized *uaddr, int addr_len) { struct sockaddr_in6 *usin =3D (struct sockaddr_in6 *) uaddr; @@ -239,7 +239,7 @@ static int tcp_v6_connect(struct sock *sk, struct socka= ddr *uaddr, tp->af_specific =3D &tcp_sock_ipv6_mapped_specific; #endif =20 - err =3D tcp_v4_connect(sk, (struct sockaddr *)&sin, sizeof(sin)); + err =3D tcp_v4_connect(sk, (struct sockaddr_unsized *)&sin, sizeof(sin)); =20 if (err) { icsk->icsk_ext_hdr_len =3D exthdrlen; diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 813a2ba75824..794c13674e8a 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -1282,7 +1282,7 @@ static void udp_v6_flush_pending_frames(struct sock *= sk) } } =20 -static int udpv6_pre_connect(struct sock *sk, struct sockaddr *uaddr, +static int udpv6_pre_connect(struct sock *sk, struct sockaddr_unsized *uad= dr, int addr_len) { if (addr_len < offsetofend(struct sockaddr, sa_family)) @@ -1303,7 +1303,8 @@ static int udpv6_pre_connect(struct sock *sk, struct = sockaddr *uaddr, return BPF_CGROUP_RUN_PROG_INET6_CONNECT_LOCK(sk, uaddr, &addr_len); } =20 -static int udpv6_connect(struct sock *sk, struct sockaddr *uaddr, int addr= _len) +static int udpv6_connect(struct sock *sk, struct sockaddr_unsized *uaddr, + int addr_len) { int res; =20 diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c index 29795d2839e8..cac1ff59cb83 100644 --- a/net/l2tp/l2tp_ip.c +++ b/net/l2tp/l2tp_ip.c @@ -267,7 +267,8 @@ static void l2tp_ip_destroy_sock(struct sock *sk) } } =20 -static int l2tp_ip_bind(struct sock *sk, struct sockaddr *uaddr, int addr_= len) +static int l2tp_ip_bind(struct sock *sk, struct sockaddr_unsized *uaddr, + int addr_len) { struct inet_sock *inet =3D inet_sk(sk); struct sockaddr_l2tpip *addr =3D (struct sockaddr_l2tpip *)uaddr; @@ -328,7 +329,8 @@ static int l2tp_ip_bind(struct sock *sk, struct sockadd= r *uaddr, int addr_len) return ret; } =20 -static int l2tp_ip_connect(struct sock *sk, struct sockaddr *uaddr, int ad= dr_len) +static int l2tp_ip_connect(struct sock *sk, struct sockaddr_unsized *uaddr, + int addr_len) { struct sockaddr_l2tpip *lsa =3D (struct sockaddr_l2tpip *)uaddr; struct l2tp_ip_net *pn =3D l2tp_ip_pernet(sock_net(sk)); diff --git a/net/l2tp/l2tp_ip6.c b/net/l2tp/l2tp_ip6.c index ea232f338dcb..05a396ba6a3e 100644 --- a/net/l2tp/l2tp_ip6.c +++ b/net/l2tp/l2tp_ip6.c @@ -280,7 +280,8 @@ static void l2tp_ip6_destroy_sock(struct sock *sk) } } =20 -static int l2tp_ip6_bind(struct sock *sk, struct sockaddr *uaddr, int addr= _len) +static int l2tp_ip6_bind(struct sock *sk, struct sockaddr_unsized *uaddr, + int addr_len) { struct inet_sock *inet =3D inet_sk(sk); struct ipv6_pinfo *np =3D inet6_sk(sk); @@ -383,7 +384,7 @@ static int l2tp_ip6_bind(struct sock *sk, struct sockad= dr *uaddr, int addr_len) return err; } =20 -static int l2tp_ip6_connect(struct sock *sk, struct sockaddr *uaddr, +static int l2tp_ip6_connect(struct sock *sk, struct sockaddr_unsized *uadd= r, int addr_len) { struct sockaddr_l2tpip6 *lsa =3D (struct sockaddr_l2tpip6 *)uaddr; diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index e0f44dc232aa..b3e0f55a7253 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -849,10 +849,10 @@ static int mptcp_pm_nl_create_listen_socket(struct so= ck *sk, addrlen =3D sizeof(struct sockaddr_in6); #endif if (ssk->sk_family =3D=3D AF_INET) - err =3D inet_bind_sk(ssk, (struct sockaddr *)&addr, addrlen); + err =3D inet_bind_sk(ssk, (struct sockaddr_unsized *)&addr, addrlen); #if IS_ENABLED(CONFIG_MPTCP_IPV6) else if (ssk->sk_family =3D=3D AF_INET6) - err =3D inet6_bind_sk(ssk, (struct sockaddr *)&addr, addrlen); + err =3D inet6_bind_sk(ssk, (struct sockaddr_unsized *)&addr, addrlen); #endif if (err) return err; diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index beb017e507a0..317223a168f7 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3722,7 +3722,8 @@ static int mptcp_ioctl(struct sock *sk, int cmd, int = *karg) return 0; } =20 -static int mptcp_connect(struct sock *sk, struct sockaddr *uaddr, int addr= _len) +static int mptcp_connect(struct sock *sk, struct sockaddr_unsized *uaddr, + int addr_len) { struct mptcp_subflow_context *subflow; struct mptcp_sock *msk =3D mptcp_sk(sk); @@ -3846,10 +3847,10 @@ static int mptcp_bind(struct socket *sock, struct s= ockaddr_unsized *uaddr, int a } =20 if (sk->sk_family =3D=3D AF_INET) - err =3D inet_bind_sk(ssk, (struct sockaddr *)uaddr, addr_len); + err =3D inet_bind_sk(ssk, uaddr, addr_len); #if IS_ENABLED(CONFIG_MPTCP_IPV6) else if (sk->sk_family =3D=3D AF_INET6) - err =3D inet6_bind_sk(ssk, (struct sockaddr *)uaddr, addr_len); + err =3D inet6_bind_sk(ssk, uaddr, addr_len); #endif if (!err) mptcp_copy_inaddrs(sk, ssk); diff --git a/net/phonet/pep.c b/net/phonet/pep.c index 4db564d9d522..120e711ea78c 100644 --- a/net/phonet/pep.c +++ b/net/phonet/pep.c @@ -882,7 +882,8 @@ static struct sock *pep_sock_accept(struct sock *sk, return newsk; } =20 -static int pep_sock_connect(struct sock *sk, struct sockaddr *addr, int le= n) +static int pep_sock_connect(struct sock *sk, struct sockaddr_unsized *addr, + int len) { struct pep_sock *pn =3D pep_sk(sk); int err; diff --git a/net/phonet/socket.c b/net/phonet/socket.c index 9391378083a4..4423d483c630 100644 --- a/net/phonet/socket.c +++ b/net/phonet/socket.c @@ -163,7 +163,7 @@ static int pn_socket_bind(struct socket *sock, struct s= ockaddr_unsized *addr, in u8 saddr; =20 if (sk->sk_prot->bind) - return sk->sk_prot->bind(sk, (struct sockaddr *)addr, len); + return sk->sk_prot->bind(sk, addr, len); =20 if (len < sizeof(struct sockaddr_pn)) return -EINVAL; @@ -252,7 +252,7 @@ static int pn_socket_connect(struct socket *sock, struc= t sockaddr_unsized *addr, pn->resource =3D pn_sockaddr_get_resource(spn); sock->state =3D SS_CONNECTING; =20 - err =3D sk->sk_prot->connect(sk, (struct sockaddr *)addr, len); + err =3D sk->sk_prot->connect(sk, addr, len); if (err) { sock->state =3D SS_UNCONNECTED; pn->dobject =3D 0; diff --git a/net/sctp/socket.c b/net/sctp/socket.c index a3d7607c1c7a..fb1f9b1d3199 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -306,7 +306,8 @@ static struct sctp_transport *sctp_addr_id2transport(st= ruct sock *sk, * sockaddr_in6 [RFC 2553]), * addr_len - the size of the address structure. */ -static int sctp_bind(struct sock *sk, struct sockaddr *addr, int addr_len) +static int sctp_bind(struct sock *sk, struct sockaddr_unsized *addr, + int addr_len) { int retval =3D 0; =20 @@ -1053,13 +1054,13 @@ static int sctp_setsockopt_bindx(struct sock *sk, s= truct sockaddr *addrs, } } =20 -static int sctp_bind_add(struct sock *sk, struct sockaddr *addrs, - int addrlen) +static int sctp_bind_add(struct sock *sk, struct sockaddr_unsized *addrs, + int addrlen) { int err; =20 lock_sock(sk); - err =3D sctp_setsockopt_bindx(sk, addrs, addrlen, SCTP_BINDX_ADD_ADDR); + err =3D sctp_setsockopt_bindx(sk, (struct sockaddr *)addrs, addrlen, SCTP= _BINDX_ADD_ADDR); release_sock(sk); return err; } --=20 2.34.1 From nobody Sat Feb 7 21:17:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 213C131B82C; Wed, 29 Oct 2025 21:44:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761774269; cv=none; b=mjKBQ9jtFqGD/oLq2Na84Hi9b7wgIfVuZFqIYH7DNy03eiIv1aNLVSwfMxgYsml9NHSsaCKpxokLy4A6Ev2s5Z1+FYvPpqOZ/PVth8AvUxBRhYYq6OZuSqRCtUmdJQ3eplpGEp7FZhsRYozfEwUxBFJ6DdSqMUEsUtiUfBZLBq8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761774269; c=relaxed/simple; bh=7hHzjtV3nElDc0Uq7kbfJhhINXHrIBvwebgH5T/3+R8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Q4mgi4Etf8ITWj1qVH4WwfkeYFFVyP/BBamaV0C38WSF6b5Rq45IyTW3/BmVIWs/9xguV8LWXgw0JZmA8BFS1V+j95NUqPzzekBg4z2m9bVU+qYQ4UPR3WEDdwyE93SbHfgn0DuOCIIZn6oVJyyDzs9A542rLgiKu9arukO1VH8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XUeIXh/o; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="XUeIXh/o" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A52F3C4AF11; Wed, 29 Oct 2025 21:44:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761774268; bh=7hHzjtV3nElDc0Uq7kbfJhhINXHrIBvwebgH5T/3+R8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XUeIXh/oMzwR5avVTWsWzBuQaMnPcqY6LYXO+FQ8Fh0tFf423Nir6BEFZs9uctQvj wdk2tWn5BLWUu2O0yQo6+LcB7MjcFbRZqAgWlu1GSHrYDBBk4aAf1kq4eb9UFP5yeR AjNSMfuEFcfRNDmOzkRVgyeDcP+/p8DNa75k2w7cTw9pEIztEZo4+e2lA1Z9w7RQvc qja4XwZQgeQ6rnqAqwK6VNbAiEh9a1Kdsrsc0SHYMeueknLAN3H7gzkRYmL0gCrGBE 8uHCeELIvBGfsgEmlGDCFknP5acXIWf34Pk/ff7rqNV9MSkf+8AECI66Dvok7C7YVC sTALBrmhPTMDw== From: Kees Cook To: Paolo Abeni Cc: Kees Cook , Jakub Kicinski , "Gustavo A. R. Silva" , Alexei Starovoitov , Daniel Borkmann , John Fastabend , "David S. Miller" , Eric Dumazet , Simon Horman , Kuniyuki Iwashima , Willem de Bruijn , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [net-next PATCH v4 5/7] bpf: Convert cgroup sockaddr filters to use sockaddr_unsized consistently Date: Wed, 29 Oct 2025 14:44:02 -0700 Message-Id: <20251029214428.2467496-5-kees@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251029214355.work.602-kees@kernel.org> References: <20251029214355.work.602-kees@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=4356; i=kees@kernel.org; h=from:subject; bh=7hHzjtV3nElDc0Uq7kbfJhhINXHrIBvwebgH5T/3+R8=; b=owGbwMvMwCVmps19z/KJym7G02pJDJlMXYvalr8XP+xRxMmh8FKxJu1jaM3Bk/e7drtJvpqQe DeHN3J1RykLgxgXg6yYIkuQnXuci8fb9nD3uYowc1iZQIYwcHEKwES0PjP8U1/zPEPhzQzJlMZ9 OR5nQowuMHE6Sib8lM2P9r50RCHGmZHhov890RL+njNNXWxn2itrDx1Ytsx9otkpLveoxoN72xa yAQA= X-Developer-Key: i=kees@kernel.org; a=openpgp; fpr=A5C3F68F229DD60F723E6E138972F4DFDC6DC026 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Update BPF cgroup sockaddr filtering infrastructure to use sockaddr_unsized consistently throughout the call chain, removing redundant explicit casts from callers. No binary changes expected. Signed-off-by: Kees Cook --- include/linux/bpf-cgroup.h | 17 ++++++++++------- kernel/bpf/cgroup.c | 4 ++-- net/ipv4/af_inet.c | 4 ++-- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/include/linux/bpf-cgroup.h b/include/linux/bpf-cgroup.h index a7fb4f46974f..d1eb5c7729cb 100644 --- a/include/linux/bpf-cgroup.h +++ b/include/linux/bpf-cgroup.h @@ -120,7 +120,7 @@ int __cgroup_bpf_run_filter_sk(struct sock *sk, enum cgroup_bpf_attach_type atype); =20 int __cgroup_bpf_run_filter_sock_addr(struct sock *sk, - struct sockaddr *uaddr, + struct sockaddr_unsized *uaddr, int *uaddrlen, enum cgroup_bpf_attach_type atype, void *t_ctx, @@ -238,8 +238,9 @@ static inline bool cgroup_bpf_sock_enabled(struct sock = *sk, ({ \ int __ret =3D 0; \ if (cgroup_bpf_enabled(atype)) \ - __ret =3D __cgroup_bpf_run_filter_sock_addr(sk, (struct sockaddr *)uaddr= , uaddrlen, \ - atype, NULL, NULL); \ + __ret =3D __cgroup_bpf_run_filter_sock_addr(sk, \ + (struct sockaddr_unsized *)uaddr, uaddrlen, \ + atype, NULL, NULL); \ __ret; \ }) =20 @@ -248,8 +249,9 @@ static inline bool cgroup_bpf_sock_enabled(struct sock = *sk, int __ret =3D 0; \ if (cgroup_bpf_enabled(atype)) { \ lock_sock(sk); \ - __ret =3D __cgroup_bpf_run_filter_sock_addr(sk, (struct sockaddr *)uaddr= , uaddrlen, \ - atype, t_ctx, NULL); \ + __ret =3D __cgroup_bpf_run_filter_sock_addr(sk, \ + (struct sockaddr_unsized *)uaddr, uaddrlen, \ + atype, t_ctx, NULL); \ release_sock(sk); \ } \ __ret; \ @@ -266,8 +268,9 @@ static inline bool cgroup_bpf_sock_enabled(struct sock = *sk, int __ret =3D 0; \ if (cgroup_bpf_enabled(atype)) { \ lock_sock(sk); \ - __ret =3D __cgroup_bpf_run_filter_sock_addr(sk, (struct sockaddr *)uaddr= , uaddrlen, \ - atype, NULL, &__flags); \ + __ret =3D __cgroup_bpf_run_filter_sock_addr(sk, \ + (struct sockaddr_unsized *)uaddr, uaddrlen, \ + atype, NULL, &__flags); \ release_sock(sk); \ if (__flags & BPF_RET_BIND_NO_CAP_NET_BIND_SERVICE) \ *bind_flags |=3D BIND_NO_CAP_NET_BIND_SERVICE; \ diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c index 248f517d66d0..497aedc9afa1 100644 --- a/kernel/bpf/cgroup.c +++ b/kernel/bpf/cgroup.c @@ -1665,7 +1665,7 @@ EXPORT_SYMBOL(__cgroup_bpf_run_filter_sk); * returned value !=3D 1 during execution. In all other cases, 0 is return= ed. */ int __cgroup_bpf_run_filter_sock_addr(struct sock *sk, - struct sockaddr *uaddr, + struct sockaddr_unsized *uaddr, int *uaddrlen, enum cgroup_bpf_attach_type atype, void *t_ctx, @@ -1673,7 +1673,7 @@ int __cgroup_bpf_run_filter_sock_addr(struct sock *sk, { struct bpf_sock_addr_kern ctx =3D { .sk =3D sk, - .uaddr =3D uaddr, + .uaddr =3D (struct sockaddr *)uaddr, .t_ctx =3D t_ctx, }; struct sockaddr_storage unspec; diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 85aee1b18f89..efbdfd728515 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -813,7 +813,7 @@ int inet_getname(struct socket *sock, struct sockaddr *= uaddr, } sin->sin_port =3D inet->inet_dport; sin->sin_addr.s_addr =3D inet->inet_daddr; - BPF_CGROUP_RUN_SA_PROG(sk, (struct sockaddr *)sin, &sin_addr_len, + BPF_CGROUP_RUN_SA_PROG(sk, sin, &sin_addr_len, CGROUP_INET4_GETPEERNAME); } else { __be32 addr =3D inet->inet_rcv_saddr; @@ -821,7 +821,7 @@ int inet_getname(struct socket *sock, struct sockaddr *= uaddr, addr =3D inet->inet_saddr; sin->sin_port =3D inet->inet_sport; sin->sin_addr.s_addr =3D addr; - BPF_CGROUP_RUN_SA_PROG(sk, (struct sockaddr *)sin, &sin_addr_len, + BPF_CGROUP_RUN_SA_PROG(sk, sin, &sin_addr_len, CGROUP_INET4_GETSOCKNAME); } release_sock(sk); --=20 2.34.1 From nobody Sat Feb 7 21:17:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2179631B831; Wed, 29 Oct 2025 21:44:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761774269; cv=none; b=A+G7BFMjT+aZU0Wmscgi92pM/uxxzCq2Vnc2xTsvbkwRaHnQK+GliV2htQNcOClgjr/bEfLw6fWWraE3z3oJIbNTSIdDGOrg5kvZJkFygzbF9tuGkILnraATkkMH/Ro+7KbSBQxdr+4DWboQZXtMy9+AwNvds6X1WgZuwnUgBWg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761774269; c=relaxed/simple; bh=XWxk10N7Q4PMiZ1TaFVOoekMBwEmzzI71fU4+ab+vdE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=d4bFrn8w0OEVwSbBPGyfpVkGXrXndyO+Bbc0DHMpgqsHyKwCUDx+S0GDR1TGQLhQmoUcYC0Hat+0bamUzp3rxxh2Vl3RGWNXXdC4jFZj0HRvtcxIbEPt2mgmx+MNIjrIu1Ddzwo4IYmSuhbcBI33SXJ+VC+K8hnmpRCS6NUrDBQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=FpCXtveQ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="FpCXtveQ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A52CDC2BCB2; Wed, 29 Oct 2025 21:44:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761774268; bh=XWxk10N7Q4PMiZ1TaFVOoekMBwEmzzI71fU4+ab+vdE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=FpCXtveQL+0JaIHO3x2TdsW52wo2SsHJHJmCzRDD+K72a+eGZAj5OlH4vKaR31WFn PoelS+NzHZoWR9fOGbOhf2eA1piBfzycHqTej1bQ+4fJcpTEiVPukehWsmE8Px9Uj0 dSVqGn0Xg8nzEVzj2qR5Vz2jcP7JM1mQCEzGLf3LAvDF7aQOkSfw7A/bLT8T+anpvi WJlGqjjy8Ly7WHHeUG2I9kLoMEZpYYubrbFbCglynyX1WLajhci8SAa59aIbLwXgVe EtGMDlk1gKAJB8VTUlPTMQzfxPFV9nE8DrpxRbIC6ZkNBClE+TqFrKMKkyZ1OuYNTy SwHf5P6LhXEzg== From: Kees Cook To: Paolo Abeni Cc: Kees Cook , Jakub Kicinski , "Gustavo A. R. Silva" , Alexei Starovoitov , Daniel Borkmann , John Fastabend , "David S. Miller" , Eric Dumazet , Simon Horman , Kuniyuki Iwashima , Willem de Bruijn , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [net-next PATCH v4 6/7] bpf: Convert bpf_sock_addr_kern "uaddr" to sockaddr_unsized Date: Wed, 29 Oct 2025 14:44:03 -0700 Message-Id: <20251029214428.2467496-6-kees@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251029214355.work.602-kees@kernel.org> References: <20251029214355.work.602-kees@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2112; i=kees@kernel.org; h=from:subject; bh=XWxk10N7Q4PMiZ1TaFVOoekMBwEmzzI71fU4+ab+vdE=; b=owGbwMvMwCVmps19z/KJym7G02pJDJlMXYt3agqrBG18VnbByfXw/DB52Zrw/1uUnO9GrZf6x POeie18RykLgxgXg6yYIkuQnXuci8fb9nD3uYowc1iZQIYwcHEKwER2yjH899dePu/cubfa/9b6 Xt32vaPrrei7mQsPrXj+JV5b85PnG05GhmmfbveGPPNZ5uMyP7ls9rxPBefmzvZYcnXOvIiZxq3 T1FgA X-Developer-Key: i=kees@kernel.org; a=openpgp; fpr=A5C3F68F229DD60F723E6E138972F4DFDC6DC026 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Change struct bpf_sock_addr_kern to use sockaddr_unsized for the "uaddr" field instead of sockaddr. This improves type safety in the BPF cgroup socket address filtering code. The casting in __cgroup_bpf_run_filter_sock_addr() is updated to match the new type, removing an unnecessary cast in the initialization and updating the conditional assignment to use the appropriate sockaddr_unsized cast. Additionally rename the "unspec" variable to "storage" to better align with its usage. No binary changes expected. Signed-off-by: Kees Cook --- include/linux/filter.h | 2 +- kernel/bpf/cgroup.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/linux/filter.h b/include/linux/filter.h index f5c859b8131a..e116de7edc58 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h @@ -1515,7 +1515,7 @@ static inline int bpf_tell_extensions(void) =20 struct bpf_sock_addr_kern { struct sock *sk; - struct sockaddr *uaddr; + struct sockaddr_unsized *uaddr; /* Temporary "register" to make indirect stores to nested structures * defined above. We need three registers to make such a store, but * only two (src and dst) are available at convert_ctx_access time diff --git a/kernel/bpf/cgroup.c b/kernel/bpf/cgroup.c index 497aedc9afa1..69988af44b37 100644 --- a/kernel/bpf/cgroup.c +++ b/kernel/bpf/cgroup.c @@ -1673,10 +1673,10 @@ int __cgroup_bpf_run_filter_sock_addr(struct sock *= sk, { struct bpf_sock_addr_kern ctx =3D { .sk =3D sk, - .uaddr =3D (struct sockaddr *)uaddr, + .uaddr =3D uaddr, .t_ctx =3D t_ctx, }; - struct sockaddr_storage unspec; + struct sockaddr_storage storage; struct cgroup *cgrp; int ret; =20 @@ -1688,8 +1688,8 @@ int __cgroup_bpf_run_filter_sock_addr(struct sock *sk, return 0; =20 if (!ctx.uaddr) { - memset(&unspec, 0, sizeof(unspec)); - ctx.uaddr =3D (struct sockaddr *)&unspec; + memset(&storage, 0, sizeof(storage)); + ctx.uaddr =3D (struct sockaddr_unsized *)&storage; ctx.uaddrlen =3D 0; } else { ctx.uaddrlen =3D *uaddrlen; --=20 2.34.1 From nobody Sat Feb 7 21:17:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2153F31B830; Wed, 29 Oct 2025 21:44:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761774269; cv=none; b=cF6IEh6uK0CG2qhrH1MKb7lg6/y5GRHltj8+gWHl3Euo//vRevWjHtdaGRVOD9/r+zzP9C+9CEv56xzU13JXVXTX85gHtaO5gwdsvNGlxvp7YTait6S6jbB9VCIgfimRJARrzfeW4p34rj0OkHrrJlxAPx4GUQ1deshhVthryzM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761774269; c=relaxed/simple; bh=vt9ux/r4/zsVulKw+GrtHYCH8WIHFA6hZ/6+L1YSLVk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=M/vugwpfEscVOv3h/0IQU3EahTNvLX8JX8BFIJJ8+6ofP4pT/v2LuRjTRw/q+zSxA1ZqQQFoB47mJUKTdvYAaq2n1y/wAELLYylyWlzIBOwuaL+3hQ0uiZ5MN95NEN9bwnJCb1T9L3iJSsZw6jtKBRIsIUNvT6dQQnYE4s4AUlY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=A5S9LhPd; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="A5S9LhPd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A529BC2BCB1; Wed, 29 Oct 2025 21:44:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1761774268; bh=vt9ux/r4/zsVulKw+GrtHYCH8WIHFA6hZ/6+L1YSLVk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=A5S9LhPdW/vMsLHHMms7O0WD+F9QtwkWhbIkUnKhFbfigYlnYEYbpILUeT28/HRzd EWg88r5vFo7B7jndJ760XU+Rv/Nd0exKqVNtEmQ06kwDQxQLcOi2jCPc/VY96y69si +GvtwI7OeoM8vL7NLfB88X/dBrQ6um/OYjhe4v19Zg1IrdJD98kE9Gk+VVDGTVjjJD zcIvFu0xunMu/MZkqhMJhBuH4cbS6y3SzBPDGn0dTVJh5UuydlpfKiVHWdh0lc/OAC Uilg1VTFU5Yab3BBd6g8mk2/k/X6/J4q5wYpHOUO6/AVLIt73bAN6jLxsjAYy/rd0e PRLfCQHKd8C+g== From: Kees Cook To: Paolo Abeni Cc: Kees Cook , "Gustavo A. R. Silva" , Jakub Kicinski , Alexei Starovoitov , Daniel Borkmann , John Fastabend , "David S. Miller" , Eric Dumazet , Simon Horman , Kuniyuki Iwashima , Willem de Bruijn , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-hardening@vger.kernel.org Subject: [net-next PATCH v4 7/7] net: Convert struct sockaddr to fixed-size "sa_data[14]" Date: Wed, 29 Oct 2025 14:44:04 -0700 Message-Id: <20251029214428.2467496-7-kees@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251029214355.work.602-kees@kernel.org> References: <20251029214355.work.602-kees@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=5440; i=kees@kernel.org; h=from:subject; bh=vt9ux/r4/zsVulKw+GrtHYCH8WIHFA6hZ/6+L1YSLVk=; b=owGbwMvMwCVmps19z/KJym7G02pJDJlMXYuzb7V2Z63fua3wgM+Bls6nLdJdb56tT9TLfr5ZL c11n3RSRykLgxgXg6yYIkuQnXuci8fb9nD3uYowc1iZQIYwcHEKwET8nRkZLql7n97fvS/I4ciN NW9armdKzTl8KnfVSx291w2XhJq/SjEyNDUuPrs8Z11Ou+fVgi/uycE/smZe4OBda7E+R8ptxW4 LPgA= X-Developer-Key: i=kees@kernel.org; a=openpgp; fpr=A5C3F68F229DD60F723E6E138972F4DFDC6DC026 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Revert struct sockaddr from flexible array to fixed 14-byte "sa_data", to solve over 36,000 -Wflex-array-member-not-at-end warnings, since struct sockaddr is embedded within many network structs. With socket/proto sockaddr-based internal APIs switched to use struct sockaddr_unsized, there should be no more uses of struct sockaddr that depend on reading beyond the end of struct sockaddr::sa_data that might trigger bounds checking. Comparing an x86_64 "allyesconfig" vmlinux build before and after this patch showed no new "ud1" instructions from CONFIG_UBSAN_BOUNDS nor any new "field-spanning" memcpy CONFIG_FORTIFY_SOURCE instrumentations. Cc: "Gustavo A. R. Silva" Signed-off-by: Kees Cook --- include/linux/socket.h | 6 ++---- tools/perf/trace/beauty/include/linux/socket.h | 5 +---- net/core/dev.c | 2 +- net/core/dev_ioctl.c | 2 +- net/ipv4/arp.c | 2 +- net/packet/af_packet.c | 10 +++++----- 6 files changed, 11 insertions(+), 16 deletions(-) diff --git a/include/linux/socket.h b/include/linux/socket.h index 7b1a01be29da..944027f9765e 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h @@ -32,12 +32,10 @@ typedef __kernel_sa_family_t sa_family_t; * 1003.1g requires sa_family_t and that sa_data is char. */ =20 +/* Deprecated for in-kernel use. Use struct sockaddr_unsized instead. */ struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ - union { - char sa_data_min[14]; /* Minimum 14 bytes of protocol address */ - DECLARE_FLEX_ARRAY(char, sa_data); - }; + char sa_data[14]; /* 14 bytes of protocol address */ }; =20 /** diff --git a/tools/perf/trace/beauty/include/linux/socket.h b/tools/perf/tr= ace/beauty/include/linux/socket.h index 3b262487ec06..77d7c59f5d8b 100644 --- a/tools/perf/trace/beauty/include/linux/socket.h +++ b/tools/perf/trace/beauty/include/linux/socket.h @@ -34,10 +34,7 @@ typedef __kernel_sa_family_t sa_family_t; =20 struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ - union { - char sa_data_min[14]; /* Minimum 14 bytes of protocol address */ - DECLARE_FLEX_ARRAY(char, sa_data); - }; + char sa_data[14]; /* 14 bytes of protocol address */ }; =20 struct linger { diff --git a/net/core/dev.c b/net/core/dev.c index 2acfa44927da..e29b67ad124f 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -9885,7 +9885,7 @@ DECLARE_RWSEM(dev_addr_sem); /* "sa" is a true struct sockaddr with limited "sa_data" member. */ int netif_get_mac_address(struct sockaddr *sa, struct net *net, char *dev_= name) { - size_t size =3D sizeof(sa->sa_data_min); + size_t size =3D sizeof(sa->sa_data); struct net_device *dev; int ret =3D 0; =20 diff --git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c index ad54b12d4b4c..b3ce0fb24a69 100644 --- a/net/core/dev_ioctl.c +++ b/net/core/dev_ioctl.c @@ -596,7 +596,7 @@ static int dev_ifsioc(struct net *net, struct ifreq *if= r, void __user *data, if (ifr->ifr_hwaddr.sa_family !=3D dev->type) return -EINVAL; memcpy(dev->broadcast, ifr->ifr_hwaddr.sa_data, - min(sizeof(ifr->ifr_hwaddr.sa_data_min), + min(sizeof(ifr->ifr_hwaddr.sa_data), (size_t)dev->addr_len)); netdev_lock_ops(dev); call_netdevice_notifiers(NETDEV_CHANGEADDR, dev); diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c index 833f2cf97178..8316ca59088a 100644 --- a/net/ipv4/arp.c +++ b/net/ipv4/arp.c @@ -1189,7 +1189,7 @@ static int arp_req_get(struct net *net, struct arpreq= *r) =20 read_lock_bh(&neigh->lock); memcpy(r->arp_ha.sa_data, neigh->ha, - min(dev->addr_len, sizeof(r->arp_ha.sa_data_min))); + min(dev->addr_len, sizeof(r->arp_ha.sa_data))); r->arp_flags =3D arp_state_to_flags(neigh); read_unlock_bh(&neigh->lock); =20 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index fccad2a529cc..494d628d10a5 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -3284,7 +3284,7 @@ static int packet_bind_spkt(struct socket *sock, stru= ct sockaddr_unsized *uaddr, { struct sock *sk =3D sock->sk; struct sockaddr *sa =3D (struct sockaddr *)uaddr; - char name[sizeof(sa->sa_data_min) + 1]; + char name[sizeof(sa->sa_data) + 1]; =20 /* * Check legality @@ -3295,8 +3295,8 @@ static int packet_bind_spkt(struct socket *sock, stru= ct sockaddr_unsized *uaddr, /* uaddr->sa_data comes from the userspace, it's not guaranteed to be * zero-terminated. */ - memcpy(name, sa->sa_data, sizeof(sa->sa_data_min)); - name[sizeof(sa->sa_data_min)] =3D 0; + memcpy(name, sa->sa_data, sizeof(sa->sa_data)); + name[sizeof(sa->sa_data)] =3D 0; =20 return packet_do_bind(sk, name, 0, 0); } @@ -3581,11 +3581,11 @@ static int packet_getname_spkt(struct socket *sock,= struct sockaddr *uaddr, return -EOPNOTSUPP; =20 uaddr->sa_family =3D AF_PACKET; - memset(uaddr->sa_data, 0, sizeof(uaddr->sa_data_min)); + memset(uaddr->sa_data, 0, sizeof(uaddr->sa_data)); rcu_read_lock(); dev =3D dev_get_by_index_rcu(sock_net(sk), READ_ONCE(pkt_sk(sk)->ifindex)= ); if (dev) - strscpy(uaddr->sa_data, dev->name, sizeof(uaddr->sa_data_min)); + strscpy(uaddr->sa_data, dev->name, sizeof(uaddr->sa_data)); rcu_read_unlock(); =20 return sizeof(*uaddr); --=20 2.34.1