Thread (8 messages) 8 messages, 3 authors, 4h ago

Re: [PATCH net-next v2 3/3] af_unix: Clean up error handling in unix_listen()

From: Kuniyuki Iwashima <kuniyu@google.com>
Date: 2026-07-04 01:46:34
Also in: lkml

On Fri, Jul 3, 2026 at 1:15 AM John Ericson
[off-list ref] wrote:
From: John Ericson <redacted>

To avoid the sort of bug that was just fixed going forward, switch to a
style where `err = -E...;` instead happens right before the `goto`.
(`err = other_function(...);` is not changed.) Then there is no
spooky-action-at-a-distance between the `err` initialization and the
`goto`, something which is easier to slip by code review.
Sorry, I meant posting this separately to net-next.git after the
patch 1 is merged to net.git and lands net-next.git.

Also could you remove markdown `` ?

quoted hunk ↗ jump to hunk
Assisted-by: Claude:claude-fable-5
Signed-off-by: John Ericson <redacted>
---
 net/unix/af_unix.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
index 10ed9421e43a..7878b27bbaf8 100644
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@ -813,19 +813,22 @@ static int unix_listen(struct socket *sock, int backlog)
        struct unix_sock *u = unix_sk(sk);
        struct unix_peercred peercred = {};

-       err = -EOPNOTSUPP;
-       if (sock->type != SOCK_STREAM && sock->type != SOCK_SEQPACKET)
+       if (sock->type != SOCK_STREAM && sock->type != SOCK_SEQPACKET) {
+               err = -EOPNOTSUPP;
                goto out;       /* Only stream/seqpacket sockets accept */
-       err = -EINVAL;
-       if (!READ_ONCE(u->addr))
+       }
+       if (!READ_ONCE(u->addr)) {
+               err = -EINVAL;
                goto out;       /* No listens on an unbound socket */
+       }
        err = prepare_peercred(&peercred);
        if (err)
                goto out;
        unix_state_lock(sk);
-       err = -EINVAL;
-       if (sk->sk_state != TCP_CLOSE && sk->sk_state != TCP_LISTEN)
+       if (sk->sk_state != TCP_CLOSE && sk->sk_state != TCP_LISTEN) {
+               err = -EINVAL;
                goto out_unlock;
+       }
        if (backlog > sk->sk_max_ack_backlog)
                wake_up_interruptible_all(&u->peer_wait);
        sk->sk_max_ack_backlog  = backlog;
--
2.54.0
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help