Hi,

Eric Dumazet <eduma...@google.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 <eduma...@google.com>
> Cc: Willem de Bruijn <will...@google.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.go...@intel.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

Reply via email to