Skip to content

Commit e9cdebb

Browse files
jrifeteigland
authored andcommitted
dlm: use kernel_connect() and kernel_bind()
Recent changes to kernel_connect() and kernel_bind() ensure that callers are insulated from changes to the address parameter made by BPF SOCK_ADDR hooks. This patch wraps direct calls to ops->connect() and ops->bind() with kernel_connect() and kernel_bind() to protect callers in such cases. Link: https://lore.kernel.org/netdev/9944248dba1bce861375fcce9de663934d933ba9.camel@redhat.com/ Fixes: d74bad4 ("bpf: Hooks for sys_connect") Fixes: 4fbac77 ("bpf: Hooks for sys_bind") Cc: stable@vger.kernel.org Signed-off-by: Jordan Rife <jrife@google.com> Signed-off-by: David Teigland <teigland@redhat.com>
1 parent b85ea95 commit e9cdebb

1 file changed

Lines changed: 7 additions & 7 deletions

File tree

fs/dlm/lowcomms.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1817,8 +1817,8 @@ static int dlm_tcp_bind(struct socket *sock)
18171817
memcpy(&src_addr, &dlm_local_addr[0], sizeof(src_addr));
18181818
make_sockaddr(&src_addr, 0, &addr_len);
18191819

1820-
result = sock->ops->bind(sock, (struct sockaddr *)&src_addr,
1821-
addr_len);
1820+
result = kernel_bind(sock, (struct sockaddr *)&src_addr,
1821+
addr_len);
18221822
if (result < 0) {
18231823
/* This *may* not indicate a critical error */
18241824
log_print("could not bind for connect: %d", result);
@@ -1830,7 +1830,7 @@ static int dlm_tcp_bind(struct socket *sock)
18301830
static int dlm_tcp_connect(struct connection *con, struct socket *sock,
18311831
struct sockaddr *addr, int addr_len)
18321832
{
1833-
return sock->ops->connect(sock, addr, addr_len, O_NONBLOCK);
1833+
return kernel_connect(sock, addr, addr_len, O_NONBLOCK);
18341834
}
18351835

18361836
static int dlm_tcp_listen_validate(void)
@@ -1862,8 +1862,8 @@ static int dlm_tcp_listen_bind(struct socket *sock)
18621862

18631863
/* Bind to our port */
18641864
make_sockaddr(&dlm_local_addr[0], dlm_config.ci_tcp_port, &addr_len);
1865-
return sock->ops->bind(sock, (struct sockaddr *)&dlm_local_addr[0],
1866-
addr_len);
1865+
return kernel_bind(sock, (struct sockaddr *)&dlm_local_addr[0],
1866+
addr_len);
18671867
}
18681868

18691869
static const struct dlm_proto_ops dlm_tcp_ops = {
@@ -1888,12 +1888,12 @@ static int dlm_sctp_connect(struct connection *con, struct socket *sock,
18881888
int ret;
18891889

18901890
/*
1891-
* Make sock->ops->connect() function return in specified time,
1891+
* Make kernel_connect() function return in specified time,
18921892
* since O_NONBLOCK argument in connect() function does not work here,
18931893
* then, we should restore the default value of this attribute.
18941894
*/
18951895
sock_set_sndtimeo(sock->sk, 5);
1896-
ret = sock->ops->connect(sock, addr, addr_len, 0);
1896+
ret = kernel_connect(sock, addr, addr_len, 0);
18971897
sock_set_sndtimeo(sock->sk, 0);
18981898
return ret;
18991899
}

0 commit comments

Comments
 (0)