Re: [PATCH net v2 3/3] ovpn: use datagram_poll_queue for socket readiness in TCP
From: Sabrina Dubroca <sd@queasysnail.net>
Date: 2025-10-20 10:17:05
2025-10-20, 09:37:31 +0200, Ralf Lici wrote:
quoted hunk ↗ jump to hunk
diff --git a/drivers/net/ovpn/tcp.c b/drivers/net/ovpn/tcp.c index 289f62c5d2c7..308fdbb75cea 100644 --- a/drivers/net/ovpn/tcp.c +++ b/drivers/net/ovpn/tcp.c@@ -560,16 +560,34 @@ static void ovpn_tcp_close(struct sock *sk, long timeout) static __poll_t ovpn_tcp_poll(struct file *file, struct socket *sock, poll_table *wait) { - __poll_t mask = datagram_poll(file, sock, wait); + struct sk_buff_head *queue = &sock->sk->sk_receive_queue; struct ovpn_socket *ovpn_sock; + struct ovpn_peer *peer = NULL; + __poll_t mask; rcu_read_lock(); ovpn_sock = rcu_dereference_sk_user_data(sock->sk); - if (ovpn_sock && ovpn_sock->peer && - !skb_queue_empty(&ovpn_sock->peer->tcp.user_queue)) - mask |= EPOLLIN | EPOLLRDNORM; + /* if we landed in this callback, we expect to have a + * meaningful state. The ovpn_socket lifecycle would + * prevent it otherwise. + */ + if (WARN_ON(!ovpn_sock || !ovpn_sock->peer)) { + rcu_read_unlock(); + pr_err_ratelimited("ovpn: null state in ovpn_tcp_poll!\n");
nit: the extra print is not really necessary once we've done a full
WARN. But if you want the custom message alongside the WARN, maybe:
if (WARN(!ovpn_sock || !ovpn_sock->peer, "ovpn: null state in ovpn_tcp_poll!")) {
...
}
(you can find examples of the "if (WARN(cond, msg))" pattern in
net/core/skbuff.c:
drop_reasons_register_subsys/drop_reasons_unregister_subsys
and other places)
Other than that, the patch looks good, thanks.
+ return 0; + }
-- Sabrina