net: lockless SO_{TYPE|PROTOCOL|DOMAIN|ERROR } setsockopt()
authorEric Dumazet <edumazet@google.com>
Thu, 21 Sep 2023 20:28:13 +0000 (20:28 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 1 Oct 2023 18:09:54 +0000 (19:09 +0100)
This options can not be set and return -ENOPROTOOPT,
no need to acqure socket lock.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/sock.c

index f01c757245683452fd6c30c51b885d09427ef697..4d20b74a93cb57bba58447f37e87b677167b8425 100644 (file)
@@ -1135,6 +1135,11 @@ int sk_setsockopt(struct sock *sk, int level, int optname,
        case SO_PASSPIDFD:
                assign_bit(SOCK_PASSPIDFD, &sock->flags, valbool);
                return 0;
+       case SO_TYPE:
+       case SO_PROTOCOL:
+       case SO_DOMAIN:
+       case SO_ERROR:
+               return -ENOPROTOOPT;
        }
 
        sockopt_lock_sock(sk);
@@ -1152,12 +1157,6 @@ int sk_setsockopt(struct sock *sk, int level, int optname,
        case SO_REUSEPORT:
                sk->sk_reuseport = valbool;
                break;
-       case SO_TYPE:
-       case SO_PROTOCOL:
-       case SO_DOMAIN:
-       case SO_ERROR:
-               ret = -ENOPROTOOPT;
-               break;
        case SO_DONTROUTE:
                sock_valbool_flag(sk, SOCK_LOCALROUTE, valbool);
                sk_dst_reset(sk);