Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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: Ernestas Kulik <ernestas.k@iconn-networks.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20260421060304.285419-1-ernestas.k@iconn-networks.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Ernestas Kulik and committed by
Jakub Kicinski
864ba40c 67bf002a

+3 -1
+3 -1
net/llc/af_llc.c
··· 520 520 if (sk->sk_state == TCP_SYN_SENT) { 521 521 const long timeo = sock_sndtimeo(sk, flags & O_NONBLOCK); 522 522 523 - if (!timeo || !llc_ui_wait_for_conn(sk, timeo)) 523 + if (!timeo || !llc_ui_wait_for_conn(sk, timeo)) { 524 + rc = -EINPROGRESS; 524 525 goto out; 526 + } 525 527 526 528 rc = sock_intr_errno(timeo); 527 529 if (signal_pending(current))