]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: Convert proto_ops bind() callbacks to use sockaddr_unsized
authorKees Cook <kees@kernel.org>
Tue, 4 Nov 2025 00:26:10 +0000 (16:26 -0800)
committerJakub Kicinski <kuba@kernel.org>
Wed, 5 Nov 2025 03:10:32 +0000 (19:10 -0800)
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 <kees@kernel.org>
Link: https://patch.msgid.link/20251104002617.2752303-2-kees@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
74 files changed:
crypto/af_alg.c
drivers/block/drbd/drbd_receiver.c
drivers/infiniband/hw/erdma/erdma_cm.c
drivers/infiniband/sw/siw/siw_cm.c
drivers/isdn/mISDN/l1oip_core.c
drivers/isdn/mISDN/socket.c
drivers/net/ppp/pptp.c
drivers/nvme/host/tcp.c
drivers/nvme/target/tcp.c
drivers/target/iscsi/iscsi_target_login.c
drivers/xen/pvcalls-back.c
fs/afs/rxrpc.c
fs/dlm/lowcomms.c
fs/ocfs2/cluster/tcp.c
fs/smb/client/connect.c
fs/smb/server/transport_tcp.c
include/linux/net.h
include/net/inet_common.h
include/net/ipv6.h
include/net/sock.h
net/9p/trans_fd.c
net/appletalk/ddp.c
net/atm/pvc.c
net/atm/svc.c
net/ax25/af_ax25.c
net/bluetooth/hci_sock.c
net/bluetooth/iso.c
net/bluetooth/l2cap_sock.c
net/bluetooth/rfcomm/core.c
net/bluetooth/rfcomm/sock.c
net/bluetooth/sco.c
net/can/isotp.c
net/can/j1939/socket.c
net/can/raw.c
net/core/sock.c
net/ieee802154/socket.c
net/ipv4/af_inet.c
net/ipv4/udp_tunnel_core.c
net/ipv6/af_inet6.c
net/ipv6/ip6_udp_tunnel.c
net/iucv/af_iucv.c
net/l2tp/l2tp_core.c
net/llc/af_llc.c
net/mctp/af_mctp.c
net/mctp/test/route-test.c
net/mptcp/protocol.c
net/mptcp/subflow.c
net/netfilter/ipvs/ip_vs_sync.c
net/netlink/af_netlink.c
net/netrom/af_netrom.c
net/nfc/llcp_sock.c
net/packet/af_packet.c
net/phonet/socket.c
net/qrtr/af_qrtr.c
net/qrtr/ns.c
net/rds/bind.c
net/rds/rds.h
net/rds/tcp_connect.c
net/rds/tcp_listen.c
net/rose/af_rose.c
net/rxrpc/af_rxrpc.c
net/rxrpc/rxperf.c
net/smc/af_smc.c
net/smc/smc.h
net/socket.c
net/sunrpc/clnt.c
net/sunrpc/svcsock.c
net/sunrpc/xprtsock.c
net/tipc/socket.c
net/unix/af_unix.c
net/vmw_vsock/af_vsock.c
net/x25/af_x25.c
net/xdp/xsk.c
tools/testing/selftests/bpf/test_kmods/bpf_testmod.c

index ca6fdcc6c54aca6825b8db7546e809e99dc3285e..5e760ab62618354b82490c2dec380e2697897abb 100644 (file)
@@ -145,7 +145,7 @@ void af_alg_release_parent(struct sock *sk)
 }
 EXPORT_SYMBOL_GPL(af_alg_release_parent);
 
-static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
+static int alg_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len)
 {
        const u32 allowed = CRYPTO_ALG_KERN_DRIVER_ONLY;
        struct sock *sk = sock->sk;
index caaf2781136d0930aa260a576f40578275f0dcb0..d9296f74f9025abaab4cb520e5cc904bb4631019 100644 (file)
@@ -450,7 +450,7 @@ static struct socket *drbd_try_connect(struct drbd_connection *connection)
        *  a free one dynamically.
        */
        what = "bind before connect";
-       err = sock->ops->bind(sock, (struct sockaddr *) &src_in6, my_addr_len);
+       err = sock->ops->bind(sock, (struct sockaddr_unsized *) &src_in6, my_addr_len);
        if (err < 0)
                goto out;
 
@@ -537,7 +537,7 @@ static int prepare_listen_socket(struct drbd_connection *connection, struct acce
        drbd_setbufsize(s_listen, sndbuf_size, rcvbuf_size);
 
        what = "bind before listen";
-       err = s_listen->ops->bind(s_listen, (struct sockaddr *)&my_addr, my_addr_len);
+       err = s_listen->ops->bind(s_listen, (struct sockaddr_unsized *)&my_addr, my_addr_len);
        if (err < 0)
                goto out;
 
index e0acc185e719304362be09d08af4a1c04a41e944..ef66a6359eb9f39066b20133cecec85ce29d7f10 100644 (file)
@@ -993,7 +993,7 @@ static int kernel_bindconnect(struct socket *s, struct sockaddr *laddr,
        int ret;
 
        sock_set_reuseaddr(s->sk);
-       ret = s->ops->bind(s, laddr, laddrlen);
+       ret = s->ops->bind(s, (struct sockaddr_unsized *)laddr, laddrlen);
        if (ret)
                return ret;
        ret = s->ops->connect(s, raddr, raddrlen, flags);
@@ -1315,7 +1315,7 @@ int erdma_create_listen(struct iw_cm_id *id, int backlog)
        if (ipv4_is_zeronet(laddr->sin_addr.s_addr))
                s->sk->sk_bound_dev_if = dev->netdev->ifindex;
 
-       ret = s->ops->bind(s, (struct sockaddr *)laddr,
+       ret = s->ops->bind(s, (struct sockaddr_unsized *)laddr,
                           sizeof(struct sockaddr_in));
        if (ret)
                goto error;
index 708b13993fdfd374669abf376588f71bdf27f429..7fe118cacb3ff068eef9582af6b8e7d431109321 100644 (file)
@@ -1340,7 +1340,7 @@ static int kernel_bindconnect(struct socket *s, struct sockaddr *laddr,
                        return rv;
        }
 
-       rv = s->ops->bind(s, laddr, size);
+       rv = s->ops->bind(s, (struct sockaddr_unsized *)laddr, size);
        if (rv < 0)
                return rv;
 
@@ -1789,7 +1789,7 @@ int siw_create_listen(struct iw_cm_id *id, int backlog)
                                goto error;
                        }
                }
-               rv = s->ops->bind(s, (struct sockaddr *)laddr,
+               rv = s->ops->bind(s, (struct sockaddr_unsized *)laddr,
                                  sizeof(struct sockaddr_in));
        } else {
                struct sockaddr_in6 *laddr = &to_sockaddr_in6(id->local_addr);
@@ -1813,7 +1813,7 @@ int siw_create_listen(struct iw_cm_id *id, int backlog)
                                goto error;
                        }
                }
-               rv = s->ops->bind(s, (struct sockaddr *)laddr,
+               rv = s->ops->bind(s, (struct sockaddr_unsized *)laddr,
                                  sizeof(struct sockaddr_in6));
        }
        if (rv) {
index f732f6614d3707bfc8699ae25a6400d89e00720a..6ab036e4a35fbeec515e6ea0d019bf9a048816e4 100644 (file)
@@ -676,7 +676,7 @@ l1oip_socket_thread(void *data)
        hc->sin_remote.sin_port = htons((unsigned short)hc->remoteport);
 
        /* 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);
index b215b28cad7b76a5764bda8021cece74ec5cd40f..77b900db1cac27ebb08d21f7772160ac599d16ef 100644 (file)
@@ -462,7 +462,7 @@ static int data_sock_getsockopt(struct socket *sock, int level, int optname,
 }
 
 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 addr_len)
 {
        struct sockaddr_mISDN *maddr = (struct sockaddr_mISDN *) addr;
        struct sock *sk = sock->sk;
@@ -696,7 +696,7 @@ base_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
 }
 
 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 addr_len)
 {
        struct sockaddr_mISDN *maddr = (struct sockaddr_mISDN *) addr;
        struct sock *sk = sock->sk;
index 90737cb718928a2dddacdc098f1d48d4430d6ddd..d07e87a0974c035ec5762e76753fdf0fd3ffe72c 100644 (file)
@@ -382,8 +382,8 @@ drop:
        return NET_RX_DROP;
 }
 
-static int pptp_bind(struct socket *sock, struct sockaddr *uservaddr,
-       int sockaddr_len)
+static int pptp_bind(struct socket *sock, struct sockaddr_unsized *uservaddr,
+                    int sockaddr_len)
 {
        struct sock *sk = sock->sk;
        struct sockaddr_pppox *sp = (struct sockaddr_pppox *) uservaddr;
index 9a96df1a511c021b4b322bf54dc489cc400f7961..35d0bd91f6fd7e6159aedcdda85162587a936383 100644 (file)
@@ -1834,7 +1834,7 @@ static int nvme_tcp_alloc_queue(struct nvme_ctrl *nctrl, int qid,
        sk_set_memalloc(queue->sock->sk);
 
        if (nctrl->opts->mask & NVMF_OPT_HOST_TRADDR) {
-               ret = kernel_bind(queue->sock, (struct sockaddr *)&ctrl->src_addr,
+               ret = kernel_bind(queue->sock, (struct sockaddr_unsized *)&ctrl->src_addr,
                        sizeof(ctrl->src_addr));
                if (ret) {
                        dev_err(nctrl->device,
index 470bf37e5a63726dcfa934da2657b73ed29ef3fa..d543da09ef8e26b4351e17b8e54efaac57996336 100644 (file)
@@ -2055,7 +2055,7 @@ static int nvmet_tcp_add_port(struct nvmet_port *nport)
        if (so_priority > 0)
                sock_set_priority(port->sock->sk, so_priority);
 
-       ret = kernel_bind(port->sock, (struct sockaddr *)&port->addr,
+       ret = kernel_bind(port->sock, (struct sockaddr_unsized *)&port->addr,
                        sizeof(port->addr));
        if (ret) {
                pr_err("failed to bind port socket %d\n", ret);
index c2ac9a99ebbb2927b56317ff04ef20771d316617..53aca059dc16df29bccb00cc821aaef28f40bc90 100644 (file)
@@ -822,7 +822,7 @@ int iscsit_setup_np(
        sock_set_reuseaddr(sock->sk);
        ip_sock_set_freebind(sock->sk);
 
-       ret = kernel_bind(sock, (struct sockaddr *)&np->np_sockaddr, len);
+       ret = kernel_bind(sock, (struct sockaddr_unsized *)&np->np_sockaddr, len);
        if (ret < 0) {
                pr_err("kernel_bind() failed: %d\n", ret);
                goto fail;
index fd7ed65e0197d70436cf8ac08071611cdfe3a2ea..da1b516b9cfddbced68c7bd2de9405f2973887fa 100644 (file)
@@ -650,7 +650,7 @@ static int pvcalls_back_bind(struct xenbus_device *dev,
        if (ret < 0)
                goto out;
 
-       ret = inet_bind(map->sock, (struct sockaddr *)&req->u.bind.addr,
+       ret = inet_bind(map->sock, (struct sockaddr_unsized *)&req->u.bind.addr,
                        req->u.bind.len);
        if (ret < 0)
                goto out;
index c1cadf8fb346afffb014918d514336e0528d3097..bf0e4ea0aafdf1390a364f720e95fb574e3a329f 100644 (file)
@@ -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);
 
-       ret = kernel_bind(socket, (struct sockaddr *) &srx, sizeof(srx));
+       ret = kernel_bind(socket, (struct sockaddr_unsized *) &srx, sizeof(srx));
        if (ret == -EADDRINUSE) {
                srx.transport.sin6.sin6_port = 0;
-               ret = kernel_bind(socket, (struct sockaddr *) &srx, sizeof(srx));
+               ret = kernel_bind(socket, (struct sockaddr_unsized *) &srx, sizeof(srx));
        }
        if (ret < 0)
                goto error_2;
 
        srx.srx_service = YFS_CM_SERVICE;
-       ret = kernel_bind(socket, (struct sockaddr *) &srx, sizeof(srx));
+       ret = kernel_bind(socket, (struct sockaddr_unsized *) &srx, sizeof(srx));
        if (ret < 0)
                goto error_2;
 
index 9a0b6c2b6b01e4f3d6bdc6ceaffd4f52ac817513..0500421b6e3bd2c9765b382418b30d2b814b9a39 100644 (file)
@@ -1134,7 +1134,7 @@ static int sctp_bind_addrs(struct socket *sock, __be16 port)
                make_sockaddr(&localaddr, port, &addr_len);
 
                if (!i)
-                       result = kernel_bind(sock, addr, addr_len);
+                       result = kernel_bind(sock, (struct sockaddr_unsized *)addr, addr_len);
                else
                        result = sock_bind_add(sock->sk, addr, addr_len);
 
@@ -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);
 
-       result = kernel_bind(sock, (struct sockaddr *)&src_addr,
+       result = 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)
 
        /* 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);
 }
 
index b05d4e9d13b284a928056535707afe64e82f5c7b..c7734193d8d7bad94ccfa5be7a70119e0c21bfff 100644 (file)
@@ -1615,7 +1615,7 @@ static void o2net_start_connect(struct work_struct *work)
        myaddr.sin_addr.s_addr = mynode->nd_ipv4_address;
        myaddr.sin_port = htons(0); /* any port */
 
-       ret = sock->ops->bind(sock, (struct sockaddr *)&myaddr,
+       ret = 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, __be16 port)
        INIT_WORK(&o2net_listen_work, o2net_accept_many);
 
        sock->sk->sk_reuse = SK_CAN_REUSE;
-       ret = sock->ops->bind(sock, (struct sockaddr *)&sin, sizeof(sin));
+       ret = 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)); 
index dd12f3eb61dcbd2ade548b1a120ef1fee5c806f8..96d97226302035c3dccfd697eb1a4f9ef8d5215c 100644 (file)
@@ -3112,7 +3112,7 @@ bind_socket(struct TCP_Server_Info *server)
                struct socket *socket = server->ssocket;
 
                rc = kernel_bind(socket,
-                                (struct sockaddr *) &server->srcaddr,
+                                (struct sockaddr_unsized *) &server->srcaddr,
                                 sizeof(server->srcaddr));
                if (rc < 0) {
                        struct sockaddr_in *saddr4;
index 7a1e3dcc2cdee24aca5adcd4abda2dd33f28b943..bf694bc78c65521ec5608d49a8a80a934357848b 100644 (file)
@@ -519,10 +519,10 @@ static int create_socket(struct interface *iface)
        }
 
        if (ipv4)
-               ret = kernel_bind(ksmbd_socket, (struct sockaddr *)&sin,
+               ret = kernel_bind(ksmbd_socket, (struct sockaddr_unsized *)&sin,
                                  sizeof(sin));
        else
-               ret = kernel_bind(ksmbd_socket, (struct sockaddr *)&sin6,
+               ret = kernel_bind(ksmbd_socket, (struct sockaddr_unsized *)&sin6,
                                  sizeof(sin6));
        if (ret) {
                pr_err("Failed to bind socket: %d\n", ret);
index ec09620f40f709df3663148e4d470594b3593941..0e316f063113079ae68dcd434ba4bdfd70369d2c 100644 (file)
@@ -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 *vec,
                   size_t num, size_t len, int flags);
 
-int kernel_bind(struct socket *sock, struct sockaddr *addr, int addrlen);
+int kernel_bind(struct socket *sock, struct sockaddr_unsized *addr, int addrlen);
 int kernel_listen(struct socket *sock, int backlog);
 int kernel_accept(struct socket *sock, struct socket **newsock, int flags);
 int kernel_connect(struct socket *sock, struct sockaddr *addr, int addrlen,
index c17a6585d0b0b4a7d85e913468acab7dc5575f46..1666cf6f539e1b8c7181d21af266141a533ad4e7 100644 (file)
@@ -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 addr_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)
index 2ccdf85f34f16404157b1cd551c874fdfb20f52a..2188bad9a687d68b32b53bb55041a9d3d3b7efc5 100644 (file)
@@ -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 addr_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);
index c7e58b8e8a90744dce81ce8251178c8362e5c260..acbb78c96d695d1d62c48a0655812215cf033bc1 100644 (file)
@@ -1920,7 +1920,7 @@ int sock_cmsg_send(struct sock *sk, struct msghdr *msg,
  * 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_arg *);
index a516745f732f718034281cb5055b3a09cd505d37..ef517bb307e27edb3cdaa22adc34d8ec5eb59689 100644 (file)
@@ -966,7 +966,7 @@ static int p9_bind_privport(struct socket *sock)
                        ((struct sockaddr_in *)&stor)->sin_port = htons((ushort)port);
                else
                        ((struct sockaddr_in6 *)&stor)->sin6_port = htons((ushort)port);
-               err = kernel_bind(sock, (struct sockaddr *)&stor, sizeof(stor));
+               err = kernel_bind(sock, (struct sockaddr_unsized *)&stor, sizeof(stor));
                if (err != -EADDRINUSE)
                        break;
        }
index 30242fe1034191f641c57ac2411986c69c49c997..45db43cde67f19de9cd16ff4e0da5061825bf293 100644 (file)
@@ -1149,7 +1149,7 @@ out:
 }
 
 /* Set the address 'our end' of the connection */
-static int atalk_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
+static int atalk_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len)
 {
        struct sockaddr_at *addr = (struct sockaddr_at *)uaddr;
        struct sock *sk = sock->sk;
index 66d9a9bd58967201f38ab3d114ec4aa05571546a..62fdf07c53dead2b4883328484cddd4f34568d7f 100644 (file)
@@ -24,7 +24,7 @@ static int pvc_shutdown(struct socket *sock, int how)
        return 0;
 }
 
-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 = sock->sk;
@@ -59,7 +59,7 @@ out:
 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);
 }
 
 static int pvc_setsockopt(struct socket *sock, int level, int optname,
index f8137ae693b08c9aa600c3a02dc13708eb3b22e1..1906a493c8aa06404e8a776e4163097425f78f5e 100644 (file)
@@ -97,7 +97,7 @@ static int svc_release(struct socket *sock)
        return 0;
 }
 
-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);
index 6ef8b2a57a9bf1a54ec3a767c92d41557beb00f1..23c558ff96822502aa2832411676929beddd0f48 100644 (file)
@@ -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 = sock->sk;
        struct full_sockaddr_ax25 *addr = (struct full_sockaddr_ax25 *)uaddr;
index fc866759910d95f40f159cfd63710f4c5e519dfd..ba9f48771e11ddb44c105c1377ec1b3274d9c4e4 100644 (file)
@@ -1185,7 +1185,7 @@ static int hci_sock_compat_ioctl(struct socket *sock, unsigned int cmd,
 }
 #endif
 
-static int hci_sock_bind(struct socket *sock, struct sockaddr *addr,
+static int hci_sock_bind(struct socket *sock, struct sockaddr_unsized *addr,
                         int addr_len)
 {
        struct sockaddr_hci haddr;
index 3d98cb6291da67a9e234fbc705aff457bc9bf424..6a7e1b4a8701be9fde37aaebd08c3a950b7a5bee 100644 (file)
@@ -944,7 +944,7 @@ static int iso_sock_create(struct net *net, struct socket *sock, int protocol,
        return 0;
 }
 
-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 = (struct sockaddr_iso *)addr;
@@ -1022,7 +1022,7 @@ done:
        return err;
 }
 
-static int iso_sock_bind(struct socket *sock, struct sockaddr *addr,
+static int iso_sock_bind(struct socket *sock, struct sockaddr_unsized *addr,
                         int addr_len)
 {
        struct sockaddr_iso *sa = (struct sockaddr_iso *)addr;
index 814fb8610ac437cf50d46d51254f1236ef690d81..ca7394d8fa4e24a146642051309bdf64c4ef9b12 100644 (file)
@@ -80,7 +80,7 @@ static int l2cap_validate_le_psm(u16 psm)
        return 0;
 }
 
-static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
+static int l2cap_sock_bind(struct socket *sock, struct sockaddr_unsized *addr, int alen)
 {
        struct sock *sk = sock->sk;
        struct l2cap_chan *chan = l2cap_pi(sk)->chan;
index 96250807b32b44817df6780c2a54c107e6b3de31..d62fd6c5761752d2e4919a048b624ef58430928d 100644 (file)
@@ -781,7 +781,7 @@ static struct rfcomm_session *rfcomm_session_create(bdaddr_t *src,
        addr.l2_psm    = 0;
        addr.l2_cid    = 0;
        addr.l2_bdaddr_type = BDADDR_BREDR;
-       *err = kernel_bind(sock, (struct sockaddr *) &addr, sizeof(addr));
+       *err = kernel_bind(sock, (struct sockaddr_unsized *)&addr, sizeof(addr));
        if (*err < 0)
                goto failed;
 
@@ -2068,7 +2068,7 @@ static int rfcomm_add_listener(bdaddr_t *ba)
        addr.l2_psm    = cpu_to_le16(L2CAP_PSM_RFCOMM);
        addr.l2_cid    = 0;
        addr.l2_bdaddr_type = BDADDR_BREDR;
-       err = kernel_bind(sock, (struct sockaddr *) &addr, sizeof(addr));
+       err = kernel_bind(sock, (struct sockaddr_unsized *)&addr, sizeof(addr));
        if (err < 0) {
                BT_ERR("Bind failed %d", err);
                goto failed;
index 913402806fa0d4a62e70cb4aa9e91bae80d03cca..8c8762bbc6de36e6654cf2cc1e3e56f4e31a72cb 100644 (file)
@@ -324,7 +324,7 @@ static int rfcomm_sock_create(struct net *net, struct socket *sock,
        return 0;
 }
 
-static int rfcomm_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
+static int rfcomm_sock_bind(struct socket *sock, struct sockaddr_unsized *addr, int addr_len)
 {
        struct sockaddr_rc sa;
        struct sock *sk = sock->sk;
index ab0cf442d57b95fc1368a17f26e2344e673b7364..01d878205e582bf46be2ee5213dafad69ddadd21 100644 (file)
@@ -605,7 +605,7 @@ static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
        return 0;
 }
 
-static int sco_sock_bind(struct socket *sock, struct sockaddr *addr,
+static int sco_sock_bind(struct socket *sock, struct sockaddr_unsized *addr,
                         int addr_len)
 {
        struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
index 74ee1e52249b232813a06c5d2c6e404a38dce990..ce588b85665a05a28aa499e72ce5db32ecb66126 100644 (file)
@@ -1246,7 +1246,7 @@ static int isotp_release(struct socket *sock)
        return 0;
 }
 
-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 = (struct sockaddr_can *)uaddr;
        struct sock *sk = sock->sk;
index 88e7160d424896cced403a9eeca05e92ca3e3101..a2abedc757d0f2ba9471ebef295288155f4960a3 100644 (file)
@@ -440,7 +440,7 @@ static int j1939_sk_sanity_check(struct sockaddr_can *addr, int len)
        return 0;
 }
 
-static int j1939_sk_bind(struct socket *sock, struct sockaddr *uaddr, int len)
+static int j1939_sk_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int len)
 {
        struct sockaddr_can *addr = (struct sockaddr_can *)uaddr;
        struct j1939_sock *jsk = j1939_sk(sock->sk);
index a53853f5e9afc57404132f9acb246e8af2ba0d9c..f36a83d3447cfd6d70364dbd49534507f059660e 100644 (file)
@@ -449,7 +449,7 @@ static int raw_release(struct socket *sock)
        return 0;
 }
 
-static int raw_bind(struct socket *sock, struct sockaddr *uaddr, int len)
+static int raw_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int len)
 {
        struct sockaddr_can *addr = (struct sockaddr_can *)uaddr;
        struct sock *sk = sock->sk;
index 7a9bbc2afcf0867e8f13fc1b3630ac789bd213ae..1e1ce18bba1611b990ae164c0b170936f147fa7d 100644 (file)
@@ -3462,7 +3462,7 @@ EXPORT_SYMBOL_GPL(sk_set_peek_off);
  * function, some default processing is provided.
  */
 
-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;
 }
index 18d267921bb53152eba295a5456525f3f97ee1d0..99ddfad9bb88fc89387798d5df66136415d91144 100644 (file)
@@ -96,13 +96,13 @@ static int ieee802154_sock_sendmsg(struct socket *sock, struct msghdr *msg,
        return sk->sk_prot->sendmsg(sk, msg, len);
 }
 
-static int ieee802154_sock_bind(struct socket *sock, struct sockaddr *uaddr,
+static int ieee802154_sock_bind(struct socket *sock, struct sockaddr_unsized *uaddr,
                                int addr_len)
 {
        struct sock *sk = sock->sk;
 
        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);
 
        return sock_no_bind(sock, uaddr, addr_len);
 }
index 0784e2a873a15fea6535b234e053cb66cca5a721..aa43d16e48ff13bc3ada037fd34a06c418c7d3f8 100644 (file)
@@ -464,9 +464,9 @@ int inet_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len)
        return __inet_bind(sk, uaddr, addr_len, flags);
 }
 
-int inet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
+int inet_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len)
 {
-       return inet_bind_sk(sock->sk, uaddr, addr_len);
+       return inet_bind_sk(sock->sk, (struct sockaddr *)uaddr, addr_len);
 }
 EXPORT_SYMBOL(inet_bind);
 
index 54386e06a8136528b6d19480a285ea6bc5c5e9a8..11e5a88c923de2e2bfa7ad201d8fcfc4fc610dcf 100644 (file)
@@ -29,7 +29,7 @@ int udp_sock_create4(struct net *net, struct udp_port_cfg *cfg,
        udp_addr.sin_family = AF_INET;
        udp_addr.sin_addr = cfg->local_ip;
        udp_addr.sin_port = cfg->local_udp_port;
-       err = kernel_bind(sock, (struct sockaddr *)&udp_addr,
+       err = kernel_bind(sock, (struct sockaddr_unsized *)&udp_addr,
                          sizeof(udp_addr));
        if (err < 0)
                goto error;
index 44d7de1eec4f7fe7903daac07356d4f756486376..c92d27e35fbcca7b189a384a227b7a7b7ed2b273 100644 (file)
@@ -465,9 +465,9 @@ int inet6_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len)
 }
 
 /* bind for INET6 API */
-int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
+int inet6_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_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);
 
index 0ff547a4bff71d31c3b3323f64aabf4fd1d598d2..b0d9286b33c88ca017e8fd73c8fbc1fc3511aa78 100644 (file)
@@ -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 = cfg->local_udp_port;
-       err = kernel_bind(sock, (struct sockaddr *)&udp6_addr,
+       err = kernel_bind(sock, (struct sockaddr_unsized *)&udp6_addr,
                          sizeof(udp6_addr));
        if (err < 0)
                goto error;
index 4ddfc633d30cf483b921fc44551730362118c2f9..3941e32cda690b7434ed3eea2ab36a9685e42af8 100644 (file)
@@ -563,7 +563,7 @@ static void __iucv_auto_name(struct iucv_sock *iucv)
 }
 
 /* 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 *addr,
                          int addr_len)
 {
        DECLARE_SOCKADDR(struct sockaddr_iucv *, sa, addr);
index 369a2f2e459cdb86509a3f3f527036a4b519fdbb..4b5e372a5cd4373c2ee99cf6ad02fbba5119ee91 100644 (file)
@@ -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 = tunnel_id;
-                       err = kernel_bind(sock, (struct sockaddr *)&ip6_addr,
+                       err = 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 = AF_INET;
                        ip_addr.l2tp_addr = cfg->local_ip;
                        ip_addr.l2tp_conn_id = tunnel_id;
-                       err = kernel_bind(sock, (struct sockaddr *)&ip_addr,
+                       err = kernel_bind(sock, (struct sockaddr_unsized *)&ip_addr,
                                          sizeof(ip_addr));
                        if (err < 0)
                                goto out;
index 5958a80fe14cf3dea8a88d588ecfde121a9e66a5..e5bb0c0d708cc0077b0a3974a401ff37bce93d7a 100644 (file)
@@ -337,7 +337,7 @@ out:
  *     otherwise all hell will break loose.
  *     Returns: 0 upon success, negative otherwise.
  */
-static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
+static int llc_ui_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addrlen)
 {
        struct sockaddr_llc *addr = (struct sockaddr_llc *)uaddr;
        struct sock *sk = sock->sk;
index b99ba14f39d2bf8d061a4c99140a9610a723d90a..5b1ef50637b7087856324819925b5e867d7e026e 100644 (file)
@@ -49,7 +49,7 @@ static bool mctp_sockaddr_ext_is_ok(const struct sockaddr_mctp_ext *addr)
               !addr->__smctp_pad0[2];
 }
 
-static int mctp_bind(struct socket *sock, struct sockaddr *addr, int addrlen)
+static int mctp_bind(struct socket *sock, struct sockaddr_unsized *addr, int addrlen)
 {
        struct sock *sk = sock->sk;
        struct mctp_sock *msk = container_of(sk, struct mctp_sock, sk);
index 69a3ccfc6310cd78d4138f56609f1d83d4082bd1..be9149ac79dd28dbe9a191702400fcb1ca0b4185 100644 (file)
@@ -205,7 +205,7 @@ static void __mctp_route_test_init(struct kunit *test,
        addr.smctp_network = netid;
        addr.smctp_addr.s_addr = 8;
        addr.smctp_type = 0;
-       rc = kernel_bind(sock, (struct sockaddr *)&addr, sizeof(addr));
+       rc = kernel_bind(sock, (struct sockaddr_unsized *)&addr, sizeof(addr));
        KUNIT_ASSERT_EQ(test, rc, 0);
 
        *devp = dev;
index d568575cdcb59bf27f61a24fae4acc5d5219ff2a..53e2b095dfb12f4837061d6bcfc69e03242a5e20 100644 (file)
@@ -3856,7 +3856,7 @@ static struct proto mptcp_prot = {
        .no_autobind    = true,
 };
 
-static int mptcp_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
+static int mptcp_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len)
 {
        struct mptcp_sock *msk = mptcp_sk(sock->sk);
        struct sock *ssk, *sk = sock->sk;
@@ -3870,10 +3870,10 @@ static int mptcp_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
        }
 
        if (sk->sk_family == AF_INET)
-               err = inet_bind_sk(ssk, uaddr, addr_len);
+               err = inet_bind_sk(ssk, (struct sockaddr *)uaddr, addr_len);
 #if IS_ENABLED(CONFIG_MPTCP_IPV6)
        else if (sk->sk_family == AF_INET6)
-               err = inet6_bind_sk(ssk, uaddr, addr_len);
+               err = inet6_bind_sk(ssk, (struct sockaddr *)uaddr, addr_len);
 #endif
        if (!err)
                mptcp_copy_inaddrs(sk, ssk);
index e8325890a32238bd1fd558b955137a2fa32f66c2..d90237bf433cd0e6c68ff6504a52ded9c3155d1f 100644 (file)
@@ -1660,7 +1660,7 @@ int __mptcp_subflow_connect(struct sock *sk, const struct mptcp_pm_local *local,
                addrlen = sizeof(struct sockaddr_in6);
 #endif
        ssk->sk_bound_dev_if = local->ifindex;
-       err = kernel_bind(sf, (struct sockaddr *)&addr, addrlen);
+       err = kernel_bind(sf, (struct sockaddr_unsized *)&addr, addrlen);
        if (err) {
                MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_JOINSYNTXBINDERR);
                pr_debug("msk=%p local=%d remote=%d bind error: %d\n",
index 3402675bf5215b95757be33af388b8325501ef2a..d8c089ef387cfd78156263ea05f1a1309af4bada 100644 (file)
@@ -1435,7 +1435,7 @@ static int bind_mcastif_addr(struct socket *sock, struct net_device *dev)
        sin.sin_addr.s_addr  = addr;
        sin.sin_port         = 0;
 
-       return kernel_bind(sock, (struct sockaddr *)&sin, sizeof(sin));
+       return kernel_bind(sock, (struct sockaddr_unsized *)&sin, sizeof(sin));
 }
 
 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,
 
        get_mcast_sockaddr(&mcast_addr, &salen, &ipvs->bcfg, id);
        sock->sk->sk_bound_dev_if = dev->ifindex;
-       result = kernel_bind(sock, (struct sockaddr *)&mcast_addr, salen);
+       result = kernel_bind(sock, (struct sockaddr_unsized *)&mcast_addr, salen);
        if (result < 0) {
                pr_err("Error binding to the multicast addr\n");
                goto error;
index 687a84c48882a61e3c9f3fddad8c718fa4120bb2..18490a56edd021374777c845b6a13d635b87f57c 100644 (file)
@@ -966,7 +966,7 @@ static void netlink_undo_bind(int group, long unsigned int groups,
                        nlk->netlink_unbind(sock_net(sk), undo + 1);
 }
 
-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 = sock->sk;
index 3331669d8e33a49959abe774bda49ccef5701249..33468124d53db6054e4fa174719fef08ba13985b 100644 (file)
@@ -561,7 +561,7 @@ static int nr_release(struct socket *sock)
        return 0;
 }
 
-static int nr_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
+static int nr_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len)
 {
        struct sock *sk = sock->sk;
        struct nr_sock *nr = nr_sk(sk);
index 57a2f97004e1722f90c104c107cc399875403f84..26e6ceb48a82ea95522a533fd524c8a04052dee2 100644 (file)
@@ -56,7 +56,7 @@ static struct proto llcp_sock_proto = {
        .obj_size = sizeof(struct nfc_llcp_sock),
 };
 
-static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
+static int llcp_sock_bind(struct socket *sock, struct sockaddr_unsized *addr, int alen)
 {
        struct sock *sk = sock->sk;
        struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
@@ -146,7 +146,7 @@ error:
        return ret;
 }
 
-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 = sock->sk;
index 173e6edda08f8c431c0777bb9764b4fb37d9c65c..fccad2a529cc18bcfa56e8eba4bcee524602e05f 100644 (file)
@@ -3279,11 +3279,12 @@ out_unlock:
  *     Bind a packet socket to a device
  */
 
-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 = sock->sk;
-       char name[sizeof(uaddr->sa_data_min) + 1];
+       struct sockaddr *sa = (struct sockaddr *)uaddr;
+       char name[sizeof(sa->sa_data_min) + 1];
 
        /*
         *      Check legality
@@ -3294,13 +3295,13 @@ static int packet_bind_spkt(struct socket *sock, struct 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)] = 0;
+       memcpy(name, sa->sa_data, sizeof(sa->sa_data_min));
+       name[sizeof(sa->sa_data_min)] = 0;
 
        return packet_do_bind(sk, name, 0, 0);
 }
 
-static int packet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
+static int packet_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len)
 {
        struct sockaddr_ll *sll = (struct sockaddr_ll *)uaddr;
        struct sock *sk = sock->sk;
index db2d552e9b32e384c332774b99199108abd464f2..478b026477335976c74caddf3125d71b72963067 100644 (file)
@@ -153,7 +153,7 @@ EXPORT_SYMBOL(pn_sock_unhash);
 
 static DEFINE_MUTEX(port_mutex);
 
-static int pn_socket_bind(struct socket *sock, struct sockaddr *addr, int len)
+static int pn_socket_bind(struct socket *sock, struct sockaddr_unsized *addr, int len)
 {
        struct sock *sk = sock->sk;
        struct pn_sock *pn = pn_sk(sk);
@@ -163,7 +163,7 @@ static int pn_socket_bind(struct socket *sock, struct sockaddr *addr, int len)
        u8 saddr;
 
        if (sk->sk_prot->bind)
-               return sk->sk_prot->bind(sk, addr, len);
+               return sk->sk_prot->bind(sk, (struct sockaddr *)addr, len);
 
        if (len < sizeof(struct sockaddr_pn))
                return -EINVAL;
@@ -206,8 +206,8 @@ static int pn_socket_autobind(struct socket *sock)
 
        memset(&sa, 0, sizeof(sa));
        sa.spn_family = AF_PHONET;
-       err = pn_socket_bind(sock, (struct sockaddr *)&sa,
-                               sizeof(struct sockaddr_pn));
+       err = pn_socket_bind(sock, (struct sockaddr_unsized *)&sa,
+                            sizeof(struct sockaddr_pn));
        if (err != -EINVAL)
                return err;
        BUG_ON(!pn_port(pn_sk(sock->sk)->sobject));
index 00c51cf693f3d054f1771de5246498bf013775d0..00bd3dd9f0f952ed1eb499f397ff19dd1aab3d13 100644 (file)
@@ -824,7 +824,7 @@ static int qrtr_autobind(struct socket *sock)
 }
 
 /* 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 = qrtr_sk(sock->sk);
index 3de9350cbf307526e2b9fc524e929f07e257a9f4..bfcc1a453f238df93bd5f48ea531f27c3f50098f 100644 (file)
@@ -714,7 +714,7 @@ int qrtr_ns_init(void)
        sq.sq_port = QRTR_PORT_CTRL;
        qrtr_ns.local_node = sq.sq_node;
 
-       ret = kernel_bind(qrtr_ns.sock, (struct sockaddr *)&sq, sizeof(sq));
+       ret = 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;
index 97a29172a8eec44b370ae19004f2c99610f75971..f800d920d96903972c9186eaaa320ac5d671c12f 100644 (file)
@@ -160,7 +160,7 @@ void rds_remove_bound(struct rds_sock *rs)
        rs->rs_bound_addr = in6addr_any;
 }
 
-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 = sock->sk;
        struct rds_sock *rs = rds_sk_to_rs(sk);
index 5b1c072e2e7ff491684426091d00d11a398e6720..a029e5fcdea72a3e536f3c1490633390ae89b70f 100644 (file)
@@ -735,7 +735,7 @@ extern wait_queue_head_t rds_poll_waitq;
 
 
 /* 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);
index a0046e99d6df71987707a655cee0def985328b01..1eff3b03ab77494277f75649510d86999e31d39b 100644 (file)
@@ -145,7 +145,7 @@ int rds_tcp_conn_path_connect(struct rds_conn_path *cp)
                addrlen = sizeof(sin);
        }
 
-       ret = kernel_bind(sock, addr, addrlen);
+       ret = kernel_bind(sock, (struct sockaddr_unsized *)addr, addrlen);
        if (ret) {
                rdsdebug("bind failed with %d at address %pI6c\n",
                         ret, &conn->c_laddr);
index 91e34af3fe5d56c3f3e4a4087ea13c25d1595cf8..820d3e20de1952033317747da0b9718d94abf23a 100644 (file)
@@ -290,7 +290,7 @@ struct socket *rds_tcp_listen_init(struct net *net, bool isv6)
                addr_len = sizeof(*sin);
        }
 
-       ret = kernel_bind(sock, (struct sockaddr *)&ss, addr_len);
+       ret = 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);
index 543f9e8ebb6937102fa1d228b120f177d37f20d1..47369eab5aecb448e9baff16705319d082da0d77 100644 (file)
@@ -693,7 +693,7 @@ static int rose_release(struct socket *sock)
        return 0;
 }
 
-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 = sock->sk;
        struct rose_sock *rose = rose_sk(sk);
index 36df0274d7b7462498e66debc41ff1566b58d015..245f37a7439438f3e4c09ca9010d420f44e2e180 100644 (file)
@@ -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 = (struct sockaddr_rxrpc *)saddr;
        struct rxrpc_local *local;
index 2ea71e3831f75d588b9071103c8fa863c4ed7c51..98ea76fae70f3eeb9e50b5db279a618125537672 100644 (file)
@@ -211,7 +211,7 @@ static int rxperf_open_socket(void)
 
        ret = rxrpc_sock_set_security_keyring(socket->sk, rxperf_sec_keyring);
 
-       ret = kernel_bind(socket, (struct sockaddr *)&srx, sizeof(srx));
+       ret = kernel_bind(socket, (struct sockaddr_unsized *)&srx, sizeof(srx));
        if (ret < 0)
                goto error_2;
 
index e9d0e62e0b1bc8c80a485b4894bbfbe99577dfe1..be18ab08f15d6ea7d1bcf9390100eea543a6d421 100644 (file)
@@ -421,7 +421,7 @@ static struct sock *smc_sock_alloc(struct net *net, struct socket *sock,
        return sk;
 }
 
-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 = (struct sockaddr_in *)uaddr;
index 2c9084963739812e137578377b089d2d84b3b70d..a008dbe6d6f63c8b87ef29722009b3101fc386cd 100644 (file)
@@ -42,7 +42,7 @@ void smc_unhash_sk(struct sock *sk);
 void smc_release_cb(struct sock *sk);
 
 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);
index e8892b2187087bafabb357b0c5a496b7ddb7475e..aaefb2e519a743cbfbd4b96ee88648f216699542 100644 (file)
@@ -1872,7 +1872,7 @@ int __sys_bind_socket(struct socket *sock, struct sockaddr_storage *address,
                                   addrlen);
        if (!err)
                err = 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, unsigned int cmd,
  *     Returns 0 or an error.
  */
 
-int kernel_bind(struct socket *sock, struct sockaddr *addr, int addrlen)
+int kernel_bind(struct socket *sock, struct sockaddr_unsized *addr, int addrlen)
 {
        struct sockaddr_storage address;
 
        memcpy(&address, addr, addrlen);
 
-       return READ_ONCE(sock->ops)->bind(sock, (struct sockaddr *)&address,
+       return READ_ONCE(sock->ops)->bind(sock, (struct sockaddr_unsized *)&address,
                                          addrlen);
 }
 EXPORT_SYMBOL(kernel_bind);
index 8ca354ecfd02aa44ba0c59963ee5e355a7c106e1..318ee24ad900a3678b3d70b8e3fab288035e689d 100644 (file)
@@ -1457,12 +1457,12 @@ static int rpc_sockname(struct net *net, struct sockaddr *sap, size_t salen,
        switch (sap->sa_family) {
        case AF_INET:
                err = kernel_bind(sock,
-                               (struct sockaddr *)&rpc_inaddr_loopback,
+                               (struct sockaddr_unsized *)&rpc_inaddr_loopback,
                                sizeof(rpc_inaddr_loopback));
                break;
        case AF_INET6:
                err = kernel_bind(sock,
-                               (struct sockaddr *)&rpc_in6addr_loopback,
+                               (struct sockaddr_unsized *)&rpc_in6addr_loopback,
                                sizeof(rpc_in6addr_loopback));
                break;
        default:
index 7b90abc5cf0ee1520796b2f38fcb977417009830..16ff6c100821af8b4f740d231d3e6a05c27614e2 100644 (file)
@@ -1557,7 +1557,7 @@ static struct svc_xprt *svc_create_socket(struct svc_serv *serv,
                ip6_sock_set_v6only(sock->sk);
        if (type == SOCK_STREAM)
                sock->sk->sk_reuse = SK_CAN_REUSE; /* allow address reuse */
-       error = kernel_bind(sock, sin, len);
+       error = kernel_bind(sock, (struct sockaddr_unsized *)sin, len);
        if (error < 0)
                goto bummer;
 
index 3aa987e7f0724d0ac28ed74ce53999d02b5a8e70..95732a45b059b51a9a8dd479935adb6014eb5c95 100644 (file)
@@ -1845,8 +1845,8 @@ static int xs_bind(struct sock_xprt *transport, struct socket *sock)
        memcpy(&myaddr, &transport->srcaddr, transport->xprt.addrlen);
        do {
                rpc_set_port((struct sockaddr *)&myaddr, port);
-               err = kernel_bind(sock, (struct sockaddr *)&myaddr,
-                               transport->xprt.addrlen);
+               err = kernel_bind(sock, (struct sockaddr_unsized *)&myaddr,
+                                 transport->xprt.addrlen);
                if (err == 0) {
                        if (transport->xprt.reuseport)
                                transport->srcport = port;
index bc614a1f019c27e38a9353b742654b2c2bbae2ba..3903a97ada7d461e850a192c37e063f1c5f2e50d 100644 (file)
@@ -710,7 +710,7 @@ int tipc_sk_bind(struct socket *sock, struct sockaddr *skaddr, int alen)
        return res;
 }
 
-static int tipc_bind(struct socket *sock, struct sockaddr *skaddr, int alen)
+static int tipc_bind(struct socket *sock, struct sockaddr_unsized *skaddr, int alen)
 {
        struct tipc_uaddr *ua = (struct tipc_uaddr *)skaddr;
        u32 atype = ua->addrtype;
@@ -726,7 +726,7 @@ static int tipc_bind(struct socket *sock, struct sockaddr *skaddr, int alen)
                        return -EACCES;
                }
        }
-       return tipc_sk_bind(sock, skaddr, alen);
+       return tipc_sk_bind(sock, (struct sockaddr *)skaddr, alen);
 }
 
 /**
index 54177caa9c12c315e313da2dcf4ee7ed00f44255..788775f0eea72d9dee3a517edf1cc95d217d7f62 100644 (file)
@@ -843,7 +843,7 @@ out:
 }
 
 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 *);
@@ -1466,7 +1466,7 @@ out:
        return err;
 }
 
-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 = (struct sockaddr_un *)uaddr;
        struct sock *sk = sock->sk;
index 76763247a377a6ad9b12375e19c89d557fbfd038..0e5609e7284bbdd26e6afd421ba724f75836e4b3 100644 (file)
@@ -987,7 +987,7 @@ static int vsock_release(struct socket *sock)
 }
 
 static int
-vsock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
+vsock_bind(struct socket *sock, struct sockaddr_unsized *addr, int addr_len)
 {
        int err;
        struct sock *sk;
@@ -995,7 +995,7 @@ vsock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
 
        sk = sock->sk;
 
-       if (vsock_addr_cast(addr, addr_len, &vm_addr) != 0)
+       if (vsock_addr_cast((struct sockaddr *)addr, addr_len, &vm_addr) != 0)
                return -EINVAL;
 
        lock_sock(sk);
index 655d1e0ae25f7cc1c6d472ec543baad1c6a95c55..ca8006d8f7929afb339c9e8bb2cf0be4f7d5595d 100644 (file)
@@ -670,7 +670,7 @@ out:
        return 0;
 }
 
-static int x25_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
+static int x25_bind(struct socket *sock, struct sockaddr_unsized *uaddr, int addr_len)
 {
        struct sock *sk = sock->sk;
        struct sockaddr_x25 *addr = (struct sockaddr_x25 *)uaddr;
index 2f26c918d44840e1c6a8b15cbec6432c75057bc9..ed8b612ec29d0c0dfb0d4de0d4d68aae401497c6 100644 (file)
@@ -1238,7 +1238,7 @@ static bool xsk_validate_queues(struct xdp_sock *xs)
        return xs->fq_tmp && xs->cq_tmp;
 }
 
-static int xsk_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
+static int xsk_bind(struct socket *sock, struct sockaddr_unsized *addr, int addr_len)
 {
        struct sockaddr_xdp *sxdp = (struct sockaddr_xdp *)addr;
        struct sock *sk = sock->sk;
index 8074bc5f6f2004ab69781938da087292f3c8e267..0497b5dea25c0775bcd4174a9c8a922cba2a564b 100644 (file)
@@ -923,7 +923,7 @@ __bpf_kfunc int bpf_kfunc_call_kernel_bind(struct addr_args *args)
                goto out;
        }
 
-       err = kernel_bind(sock, (struct sockaddr *)&args->addr, args->addrlen);
+       err = kernel_bind(sock, (struct sockaddr_unsized *)&args->addr, args->addrlen);
 out:
        mutex_unlock(&sock_lock);