From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vlad Dumitrescu Subject: [PATCH net-next] bpf: add support for SO_PRIORITY in bpf_getsockopt Date: Thu, 9 Nov 2017 15:04:53 -0800 Message-ID: <20171109230453.28938-1-vlad@dumitrescu.ro> Cc: netdev@vger.kernel.org, kraigatgoog@gmail.com To: davem@davemloft.net, ast@fb.com, daniel@iogearbox.net, brakmo@fb.com Return-path: Received: from mail-io0-f195.google.com ([209.85.223.195]:44716 "EHLO mail-io0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754399AbdKIXFR (ORCPT ); Thu, 9 Nov 2017 18:05:17 -0500 Received: by mail-io0-f195.google.com with SMTP id m16so11663006iod.1 for ; Thu, 09 Nov 2017 15:05:17 -0800 (PST) Sender: netdev-owner@vger.kernel.org List-ID: From: Vlad Dumitrescu Allows BPF_PROG_TYPE_SOCK_OPS programs to read sk_priority. Signed-off-by: Vlad Dumitrescu --- net/core/filter.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/net/core/filter.c b/net/core/filter.c index 1afa17935954..61c791f9f628 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -3292,8 +3292,20 @@ BPF_CALL_5(bpf_getsockopt, struct bpf_sock_ops_kern *, bpf_sock, if (!sk_fullsock(sk)) goto err_clear; + if (level == SOL_SOCKET) { + if (optlen != sizeof(int)) + goto err_clear; + + switch (optname) { + case SO_PRIORITY: + *((int *)optval) = sk->sk_priority; + break; + default: + goto err_clear; + } #ifdef CONFIG_INET - if (level == SOL_TCP && sk->sk_prot->getsockopt == tcp_getsockopt) { + } else if (level == SOL_TCP && + sk->sk_prot->getsockopt == tcp_getsockopt) { if (optname == TCP_CONGESTION) { struct inet_connection_sock *icsk = inet_csk(sk); @@ -3304,11 +3316,11 @@ BPF_CALL_5(bpf_getsockopt, struct bpf_sock_ops_kern *, bpf_sock, } else { goto err_clear; } +#endif } else { goto err_clear; } return 0; -#endif err_clear: memset(optval, 0, optlen); return -EINVAL; -- 2.15.0.448.gf294e3d99a-goog