Skip to content

Commit

Permalink
net: lockless SO_PASSCRED, SO_PASSPIDFD and SO_PASSSEC
Browse files Browse the repository at this point in the history
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 <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Eric Dumazet authored and David S. Miller committed Oct 1, 2023
1 parent 10bbf16 commit 8ebfb6d
Showing 1 changed file with 9 additions and 11 deletions.
20 changes: 9 additions & 11 deletions net/core/sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -1248,14 +1257,6 @@ int sk_setsockopt(struct sock *sk, int level, int optname,
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:
Expand Down Expand Up @@ -1361,9 +1362,6 @@ int sk_setsockopt(struct sock *sk, int level, int optname,
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)) {
Expand Down

0 comments on commit 8ebfb6d

Please sign in to comment.