From: Eric Dumazet Date: Thu, 21 Sep 2023 20:28:12 +0000 (+0000) Subject: net: lockless SO_PASSCRED, SO_PASSPIDFD and SO_PASSSEC X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=8ebfb6db5a01f16cd37254bfad7145204e4bf6f2;p=linux.git net: lockless SO_PASSCRED, SO_PASSPIDFD and SO_PASSSEC sock->flags are atomic, no need to hold the socket lock in sk_setsockopt() for SO_PASSCRED, SO_PASSPIDFD and SO_PASSSEC. Signed-off-by: Eric Dumazet Signed-off-by: David S. Miller --- diff --git a/net/core/sock.c b/net/core/sock.c index 1fdc0a0d8ff2f..f01c757245683 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -1126,6 +1126,15 @@ int sk_setsockopt(struct sock *sk, int level, int optname, return 0; } return -EPERM; + case SO_PASSSEC: + assign_bit(SOCK_PASSSEC, &sock->flags, valbool); + return 0; + case SO_PASSCRED: + assign_bit(SOCK_PASSCRED, &sock->flags, valbool); + return 0; + case SO_PASSPIDFD: + assign_bit(SOCK_PASSPIDFD, &sock->flags, valbool); + return 0; } sockopt_lock_sock(sk); @@ -1248,14 +1257,6 @@ set_sndbuf: case SO_BSDCOMPAT: break; - case SO_PASSCRED: - assign_bit(SOCK_PASSCRED, &sock->flags, valbool); - break; - - case SO_PASSPIDFD: - assign_bit(SOCK_PASSPIDFD, &sock->flags, valbool); - break; - case SO_TIMESTAMP_OLD: case SO_TIMESTAMP_NEW: case SO_TIMESTAMPNS_OLD: @@ -1361,9 +1362,6 @@ set_sndbuf: sock_valbool_flag(sk, SOCK_FILTER_LOCKED, valbool); break; - case SO_PASSSEC: - assign_bit(SOCK_PASSSEC, &sock->flags, valbool); - break; case SO_MARK: if (!sockopt_ns_capable(sock_net(sk)->user_ns, CAP_NET_RAW) && !sockopt_ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)) {