lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Thu, 07 May 2020 11:09:24 -0700
From:   Vinicius Costa Gomes <vinicius.gomes@...el.com>
To:     Eric Dumazet <edumazet@...gle.com>,
        "David S . Miller" <davem@...emloft.net>
Cc:     netdev <netdev@...r.kernel.org>,
        Eric Dumazet <edumazet@...gle.com>,
        Eric Dumazet <eric.dumazet@...il.com>,
        Willem de Bruijn <willemb@...gle.com>
Subject: Re: [PATCH net-next] net: relax SO_TXTIME CAP_NET_ADMIN check

Hi,

Eric Dumazet <edumazet@...gle.com> writes:

> Now sch_fq has horizon feature, we want to allow QUIC/UDP applications
> to use EDT model so that pacing can be offloaded to the kernel (sch_fq)
> or the NIC.
>
> Signed-off-by: Eric Dumazet <edumazet@...gle.com>
> Cc: Willem de Bruijn <willemb@...gle.com>
> ---
>  net/core/sock.c | 28 ++++++++++++++++++----------
>  1 file changed, 18 insertions(+), 10 deletions(-)
>
> diff --git a/net/core/sock.c b/net/core/sock.c
> index b714162213aeae98bfee24d8b457547fe7abab4f..fd85e651ce284b6987f0e8fae94f76ec2c432899 100644
> --- a/net/core/sock.c
> +++ b/net/core/sock.c
> @@ -1152,23 +1152,31 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
>  		break;
>  
>  	case SO_TXTIME:
> -		if (!ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)) {
> -			ret = -EPERM;
> -		} else if (optlen != sizeof(struct sock_txtime)) {
> +		if (optlen != sizeof(struct sock_txtime)) {
>  			ret = -EINVAL;
> +			break;
>  		} else if (copy_from_user(&sk_txtime, optval,
>  			   sizeof(struct sock_txtime))) {
>  			ret = -EFAULT;
> +			break;
>  		} else if (sk_txtime.flags & ~SOF_TXTIME_FLAGS_MASK) {
>  			ret = -EINVAL;
> -		} else {
> -			sock_valbool_flag(sk, SOCK_TXTIME, true);
> -			sk->sk_clockid = sk_txtime.clockid;
> -			sk->sk_txtime_deadline_mode =
> -				!!(sk_txtime.flags & SOF_TXTIME_DEADLINE_MODE);
> -			sk->sk_txtime_report_errors =
> -				!!(sk_txtime.flags & SOF_TXTIME_REPORT_ERRORS);
> +			break;
>  		}
> +		/* CLOCK_MONOTONIC is only used by sch_fq, and this packet
> +		 * scheduler has enough safe guards.
> +		 */
> +		if (sk_txtime.clockid != CLOCK_MONOTONIC &&
> +		    !ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)) {
> +			ret = -EPERM;
> +			break;
> +		}

I was a bit worried until I saw the check above.

Acked-by: Vinicius Costa Gomes <vinicius.gomes@...el.com>


> +		sock_valbool_flag(sk, SOCK_TXTIME, true);
> +		sk->sk_clockid = sk_txtime.clockid;
> +		sk->sk_txtime_deadline_mode =
> +			!!(sk_txtime.flags & SOF_TXTIME_DEADLINE_MODE);
> +		sk->sk_txtime_report_errors =
> +			!!(sk_txtime.flags & SOF_TXTIME_REPORT_ERRORS);
>  		break;
>  
>  	case SO_BINDTOIFINDEX:
> -- 
> 2.26.2.526.g744177e7f7-goog
>

-- 
Vinicius

Powered by blists - more mailing lists