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 <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
10bbf1652c
commit
8ebfb6db5a
@ -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)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user