mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
net: Convert proto_ops bind() callbacks to use sockaddr_unsized
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>
This commit is contained in:
committed by
Jakub Kicinski
parent
bf33247a90
commit
0e50474fa5
+1
-1
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
+3
-3
@@ -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;
|
||||
|
||||
|
||||
+3
-3
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
+2
-2
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
+1
-1
@@ -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);
|
||||
|
||||
+1
-1
@@ -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 *);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user