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