]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
af_unix: Set error only when needed in unix_stream_connect().
authorKuniyuki Iwashima <kuniyu@amazon.com>
Fri, 13 Dec 2024 11:08:39 +0000 (20:08 +0900)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 17 Dec 2024 11:08:27 +0000 (12:08 +0100)
We will introduce skb drop reason for AF_UNIX, then we need to
set an errno and a drop reason for each path.

Let's set an error only when it's needed in unix_stream_connect().

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net/unix/af_unix.c

index 6b176230044397c5dfea86d1b39365d17144b3f0..23f419f561b83455207534a12d2aa3f68ce48cec 100644 (file)
@@ -1575,12 +1575,12 @@ static int unix_stream_connect(struct socket *sock, struct sockaddr *uaddr,
                goto out;
        }
 
-       err = -ENOMEM;
-
        /* Allocate skb for sending to listening sock */
        skb = sock_wmalloc(newsk, 1, 0, GFP_KERNEL);
-       if (skb == NULL)
+       if (!skb) {
+               err = -ENOMEM;
                goto out;
+       }
 
 restart:
        /*  Find listening sock. */
@@ -1600,16 +1600,17 @@ restart:
                goto restart;
        }
 
-       err = -ECONNREFUSED;
-       if (other->sk_state != TCP_LISTEN)
-               goto out_unlock;
-       if (other->sk_shutdown & RCV_SHUTDOWN)
+       if (other->sk_state != TCP_LISTEN ||
+           other->sk_shutdown & RCV_SHUTDOWN) {
+               err = -ECONNREFUSED;
                goto out_unlock;
+       }
 
        if (unix_recvq_full_lockless(other)) {
-               err = -EAGAIN;
-               if (!timeo)
+               if (!timeo) {
+                       err = -EAGAIN;
                        goto out_unlock;
+               }
 
                timeo = unix_wait_for_peer(other, timeo);