Commit 864ba40c authored by Ernestas Kulik's avatar Ernestas Kulik Committed by Jakub Kicinski
Browse files

llc: Return -EINPROGRESS from llc_ui_connect()



Given a zero sk_sndtimeo, llc_ui_connect() skips waiting for state
change and returns 0, confusing userspace applications that will assume
the socket is connected, making e.g. getpeername() calls error out.

More specifically, the issue was discovered in libcoap, where
newly-added AF_LLC socket support was behaving differently from AF_INET
connections due to EINPROGRESS handling being skipped.

Set rc to -EINPROGRESS if connect() would not block, akin to AF_INET
sockets.

Signed-off-by: default avatarErnestas Kulik <ernestas.k@iconn-networks.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20260421060304.285419-1-ernestas.k@iconn-networks.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 67bf002a
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -520,8 +520,10 @@ static int llc_ui_connect(struct socket *sock, struct sockaddr_unsized *uaddr,
	if (sk->sk_state == TCP_SYN_SENT) {
		const long timeo = sock_sndtimeo(sk, flags & O_NONBLOCK);

		if (!timeo || !llc_ui_wait_for_conn(sk, timeo))
		if (!timeo || !llc_ui_wait_for_conn(sk, timeo)) {
			rc = -EINPROGRESS;
			goto out;
		}

		rc = sock_intr_errno(timeo);
		if (signal_pending(current))