bpf.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jens Axboe <axboe@kernel.dk>
To: Martin KaFai Lau <martin.lau@linux.dev>,
	Breno Leitao <leitao@debian.org>
Cc: bpf@vger.kernel.org, linux-kernel@vger.kernel.org,
	netdev@vger.kernel.org, io-uring@vger.kernel.org,
	Kuniyuki Iwashima <kuniyu@amazon.com>,
	Alexander Mikhalitsyn <alexander@mihalicyn.com>,
	David Howells <dhowells@redhat.com>,
	sdf@google.com, asml.silence@gmail.com,
	willemdebruijn.kernel@gmail.com, kuba@kernel.org,
	pabeni@redhat.com, krisman@suse.de,
	Alexei Starovoitov <ast@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>,
	John Fastabend <john.fastabend@gmail.com>,
	Andrii Nakryiko <andrii@kernel.org>, Song Liu <song@kernel.org>,
	Yonghong Song <yonghong.song@linux.dev>,
	KP Singh <kpsingh@kernel.org>, Hao Luo <haoluo@google.com>,
	Jiri Olsa <jolsa@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>
Subject: Re: [PATCH v7 04/11] net/socket: Break down __sys_getsockopt
Date: Thu, 19 Oct 2023 14:04:43 -0600	[thread overview]
Message-ID: <e1920ac4-18ad-4b97-a3a3-9604724937d6@kernel.dk> (raw)
In-Reply-To: <1074c1f1-e676-fbe6-04bc-783821d746a1@linux.dev>

On 10/19/23 1:12 PM, Martin KaFai Lau wrote:
> On 10/16/23 6:47?AM, Breno Leitao wrote:
>> diff --git a/net/socket.c b/net/socket.c
>> index 0087f8c071e7..f4c156a1987e 100644
>> --- a/net/socket.c
>> +++ b/net/socket.c
>> @@ -2350,6 +2350,42 @@ SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname,
>>   INDIRECT_CALLABLE_DECLARE(bool tcp_bpf_bypass_getsockopt(int level,
>>                                int optname));
>>   +int do_sock_getsockopt(struct socket *sock, bool compat, int level,
>> +               int optname, sockptr_t optval, sockptr_t optlen)
>> +{
>> +    int max_optlen __maybe_unused;
>> +    const struct proto_ops *ops;
>> +    int err;
>> +
>> +    err = security_socket_getsockopt(sock, level, optname);
>> +    if (err)
>> +        return err;
>> +
>> +    ops = READ_ONCE(sock->ops);
>> +    if (level == SOL_SOCKET) {
>> +        err = sk_getsockopt(sock->sk, level, optname, optval, optlen);
>> +    } else if (unlikely(!ops->getsockopt)) {
>> +        err = -EOPNOTSUPP;
>> +    } else {
>> +        if (WARN_ONCE(optval.is_kernel || optlen.is_kernel,
>> +                  "Invalid argument type"))
>> +            return -EOPNOTSUPP;
>> +
>> +        err = ops->getsockopt(sock, level, optname, optval.user,
>> +                      optlen.user);
>> +    }
>> +
>> +    if (!compat) {
>> +        max_optlen = BPF_CGROUP_GETSOCKOPT_MAX_OPTLEN(optlen);
> 
> The max_optlen was done before the above sk_getsockopt. The bpf CI cannot catch it because it cannot apply patch 5 cleanly. I ran the following out of the linux-block tree:
> 
> $> ./test_progs -t sockopt_sk
> test_sockopt_sk:PASS:join_cgroup /sockopt_sk 0 nsec
> run_test:PASS:skel_load 0 nsec
> run_test:PASS:setsockopt_link 0 nsec
> run_test:PASS:getsockopt_link 0 nsec
> (/data/users/kafai/fb-kernel/linux/tools/testing/selftests/bpf/prog_tests/sockopt_sk.c:111: errno: Operation not permitted) Failed to call getsockopt, ret=-1
> run_test:FAIL:getsetsockopt unexpected error: -1 (errno 1)
> #217     sockopt_sk:FAIL

Does it work with this incremental? I can fold that in, will rebase
anyway to collect acks.


diff --git a/net/socket.c b/net/socket.c
index bccd257e13fe..eb6960958026 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -2344,6 +2344,9 @@ int do_sock_getsockopt(struct socket *sock, bool compat, int level,
 	if (err)
 		return err;
 
+	if (!compat)
+		max_optlen = BPF_CGROUP_GETSOCKOPT_MAX_OPTLEN(optlen);
+
 	ops = READ_ONCE(sock->ops);
 	if (level == SOL_SOCKET) {
 		err = sk_getsockopt(sock->sk, level, optname, optval, optlen);
@@ -2358,12 +2361,10 @@ int do_sock_getsockopt(struct socket *sock, bool compat, int level,
 				      optlen.user);
 	}
 
-	if (!compat) {
-		max_optlen = BPF_CGROUP_GETSOCKOPT_MAX_OPTLEN(optlen);
+	if (!compat)
 		err = BPF_CGROUP_RUN_PROG_GETSOCKOPT(sock->sk, level, optname,
 						     optval, optlen, max_optlen,
 						     err);
-	}
 
 	return err;
 }

-- 
Jens Axboe


  reply	other threads:[~2023-10-19 20:04 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-16 13:47 [PATCH v7 00/11] io_uring: Initial support for {s,g}etsockopt commands Breno Leitao
2023-10-16 13:47 ` [PATCH v7 01/11] bpf: Add sockptr support for getsockopt Breno Leitao
2023-10-19 19:24   ` Martin KaFai Lau
2023-10-16 13:47 ` [PATCH v7 02/11] bpf: Add sockptr support for setsockopt Breno Leitao
2023-10-19 19:32   ` Martin KaFai Lau
2023-10-16 13:47 ` [PATCH v7 03/11] net/socket: Break down __sys_setsockopt Breno Leitao
2023-10-19  0:20   ` Jakub Kicinski
2023-10-19 19:38   ` Martin KaFai Lau
2023-10-16 13:47 ` [PATCH v7 04/11] net/socket: Break down __sys_getsockopt Breno Leitao
2023-10-19  0:20   ` Jakub Kicinski
2023-10-19 19:12   ` Martin KaFai Lau
2023-10-19 20:04     ` Jens Axboe [this message]
2023-10-19 20:37       ` Martin KaFai Lau
2023-10-19 22:32         ` Jens Axboe
2023-10-16 13:47 ` [PATCH v7 05/11] io_uring/cmd: Pass compat mode in issue_flags Breno Leitao
2023-10-16 13:47 ` [PATCH v7 06/11] tools headers: Grab copy of io_uring.h Breno Leitao
2023-10-16 18:56   ` Gabriel Krisman Bertazi
     [not found]   ` <652d877c.250a0220.b0af2.3a66SMTPIN_ADDED_BROKEN@mx.google.com>
2023-10-17 12:34     ` Breno Leitao
2023-10-16 13:47 ` [PATCH v7 07/11] selftests/net: Extract uring helpers to be reusable Breno Leitao
2023-10-16 13:47 ` [PATCH v7 08/11] io_uring/cmd: return -EOPNOTSUPP if net is disabled Breno Leitao
2023-10-16 13:47 ` [PATCH v7 09/11] io_uring/cmd: Introduce SOCKET_URING_OP_GETSOCKOPT Breno Leitao
2023-10-16 18:33   ` Gabriel Krisman Bertazi
2023-10-16 13:47 ` [PATCH v7 10/11] io_uring/cmd: Introduce SOCKET_URING_OP_SETSOCKOPT Breno Leitao
2023-10-16 18:33   ` Gabriel Krisman Bertazi
2023-10-16 13:47 ` [PATCH v7 11/11] selftests/bpf/sockopt: Add io_uring support Breno Leitao
2023-10-19 19:51   ` Martin KaFai Lau
2023-10-19 14:58 ` [PATCH v7 00/11] io_uring: Initial support for {s,g}etsockopt commands Jens Axboe
2023-10-19 15:33   ` Jakub Kicinski
2023-10-19 15:40     ` Jens Axboe
2023-10-19 15:41 ` Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e1920ac4-18ad-4b97-a3a3-9604724937d6@kernel.dk \
    --to=axboe@kernel.dk \
    --cc=alexander@mihalicyn.com \
    --cc=andrii@kernel.org \
    --cc=asml.silence@gmail.com \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=davem@davemloft.net \
    --cc=dhowells@redhat.com \
    --cc=edumazet@google.com \
    --cc=haoluo@google.com \
    --cc=io-uring@vger.kernel.org \
    --cc=john.fastabend@gmail.com \
    --cc=jolsa@kernel.org \
    --cc=kpsingh@kernel.org \
    --cc=krisman@suse.de \
    --cc=kuba@kernel.org \
    --cc=kuniyu@amazon.com \
    --cc=leitao@debian.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=martin.lau@linux.dev \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=sdf@google.com \
    --cc=song@kernel.org \
    --cc=willemdebruijn.kernel@gmail.com \
    --cc=yonghong.song@linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).