All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stanislav Fomichev <sdf@google.com>
To: Breno Leitao <leitao@debian.org>
Cc: axboe@kernel.dk, asml.silence@gmail.com,
	willemdebruijn.kernel@gmail.com,  bpf@vger.kernel.org,
	linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
	 io-uring@vger.kernel.org, kuba@kernel.org, pabeni@redhat.com
Subject: Re: [PATCH v2 0/8] io_uring: Initial support for {s,g}etsockopt commands
Date: Tue, 8 Aug 2023 10:35:08 -0700	[thread overview]
Message-ID: <ZNJ8zGcYClv/VCwG@google.com> (raw)
In-Reply-To: <20230808134049.1407498-1-leitao@debian.org>

On 08/08, Breno Leitao wrote:
> This patchset adds support for getsockopt (SOCKET_URING_OP_GETSOCKOPT)
> and setsockopt (SOCKET_URING_OP_SETSOCKOPT) in io_uring commands.
> SOCKET_URING_OP_SETSOCKOPT implements generic case, covering all levels
> nad optnames. On the other hand, SOCKET_URING_OP_GETSOCKOPT just
> implements level SOL_SOCKET case, which seems to be the
> most common level parameter for get/setsockopt(2).
> 
> struct proto_ops->setsockopt() uses sockptr instead of userspace
> pointers, which makes it easy to bind to io_uring. Unfortunately
> proto_ops->getsockopt() callback uses userspace pointers, except for
> SOL_SOCKET, which is handled by sk_getsockopt(). Thus, this patchset
> leverages sk_getsockopt() to imlpement the SOCKET_URING_OP_GETSOCKOPT
> case.
> 
> In order to support BPF hooks, I modified the hooks to use  sockptr, so,
> it is flexible enough to accept user or kernel pointers for
> optval/optlen.
> 
> PS1: For getsockopt command, the optlen field is not a userspace
> pointers, but an absolute value, so this is slightly different from
> getsockopt(2) behaviour. The new optlen value is returned in cqe->res.
> 
> PS2: The userspace pointers need to be alive until the operation is
> completed.
> 
> These changes were tested with a new test[1] in liburing. On the BPF
> side, I tested that no regression was introduced by running "test_progs"
> self test using "sockopt" test case.
> 
> [1] Link: https://github.com/leitao/liburing/blob/getsock/test/socket-getsetsock-cmd.c
> 
> RFC -> V1:
> 	* Copy user memory at io_uring subsystem, and call proto_ops
> 	  callbacks using kernel memory
> 	* Implement all the cases for SOCKET_URING_OP_SETSOCKOPT

I did a quick pass, will take a close look later today. So far everything makes
sense to me.

Should we properly test it as well?
We have tools/testing/selftests/bpf/prog_tests/sockopt.c which does
most of the sanity checks, but it uses regular socket/{g,s}etsockopt
syscalls. Seems like it should be pretty easy to extend this with
io_uring path? tools/testing/selftests/net/io_uring_zerocopy_tx.c
already implements minimal wrappers which we can most likely borrow.

  parent reply	other threads:[~2023-08-08 18:02 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-08 13:40 [PATCH v2 0/8] io_uring: Initial support for {s,g}etsockopt commands Breno Leitao
2023-08-08 13:40 ` [PATCH v2 1/8] net: expose sock_use_custom_sol_socket Breno Leitao
2023-08-08 16:13   ` Hugo Villeneuve
2023-08-08 17:21     ` Breno Leitao
2023-08-08 17:46       ` Hugo Villeneuve
2023-08-09  9:39         ` Breno Leitao
2023-08-08 20:12       ` Jeff Moyer
2023-08-08 13:40 ` [PATCH v2 2/8] io_uring/cmd: Introduce SOCKET_URING_OP_GETSOCKOPT Breno Leitao
2023-08-09  4:07   ` kernel test robot
2023-08-09 10:27   ` kernel test robot
2023-08-09 13:21   ` Willem de Bruijn
2023-08-10 12:57     ` Pavel Begunkov
2023-08-08 13:40 ` [PATCH v2 3/8] io_uring/cmd: Introduce SOCKET_URING_OP_SETSOCKOPT Breno Leitao
2023-08-09  6:01   ` kernel test robot
2023-08-09 11:09   ` kernel test robot
2023-08-08 13:40 ` [PATCH v2 4/8] io_uring/cmd: Extend support beyond SOL_SOCKET Breno Leitao
2023-08-09 16:32   ` Gabriel Krisman Bertazi
2023-08-08 13:40 ` [PATCH v2 5/8] bpf: Leverage sockptr_t in BPF getsockopt hook Breno Leitao
2023-08-08 13:40 ` [PATCH v2 6/8] bpf: Leverage sockptr_t in BPF setsockopt hook Breno Leitao
2023-08-08 13:40 ` [PATCH v2 7/8] io_uring/cmd: BPF hook for getsockopt cmd Breno Leitao
2023-08-09  4:17   ` kernel test robot
2023-08-09 16:46   ` Gabriel Krisman Bertazi
2023-08-10  8:26     ` Breno Leitao
2023-08-08 13:40 ` [PATCH v2 8/8] io_uring/cmd: BPF hook for setsockopt cmd Breno Leitao
2023-08-09 22:02   ` Martin KaFai Lau
2023-08-08 17:35 ` Stanislav Fomichev [this message]
2023-08-09  9:40   ` [PATCH v2 0/8] io_uring: Initial support for {s,g}etsockopt commands Breno Leitao
2023-08-09 16:26     ` Stanislav Fomichev

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=ZNJ8zGcYClv/VCwG@google.com \
    --to=sdf@google.com \
    --cc=asml.silence@gmail.com \
    --cc=axboe@kernel.dk \
    --cc=bpf@vger.kernel.org \
    --cc=io-uring@vger.kernel.org \
    --cc=kuba@kernel.org \
    --cc=leitao@debian.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=willemdebruijn.kernel@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.