All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 0/8] io_uring: Initial support for {s,g}etsockopt commands
@ 2023-09-11 10:33 Breno Leitao
  2023-09-11 10:34 ` [PATCH v5 1/8] net/socket: Break down __sys_setsockopt Breno Leitao
                   ` (7 more replies)
  0 siblings, 8 replies; 14+ messages in thread
From: Breno Leitao @ 2023-09-11 10:33 UTC (permalink / raw)
  To: sdf, axboe, asml.silence, willemdebruijn.kernel, kuba, martin.lau,
	krisman
  Cc: bpf, linux-kernel, netdev, io-uring, pabeni

This patchset adds support for getsockopt (SOCKET_URING_OP_GETSOCKOPT)
and setsockopt (SOCKET_URING_OP_SETSOCKOPT) in io_uring commands.
SOCKET_URING_OP_SETSOCKOPT and SOCKET_URING_OP_GETSOCKOPT implement generic
case, covering all levels and optnames (a change from the previous
version, where getsockopt was limited to level=SOL_SOCKET).

In order to keep the implementation (and tests) simple, some refactors
were done prior to the changes, as follows:

Patch 1-2:  Remove the core {s,g}etsockopt() core function from
__sys_{g,s}etsockopt, so, the code could be reused by other callers,
such as io_uring.

Patch 3: Pass compat mode to the file/socket callbacks

Patch 4: Move io_uring helpers from io_uring_zerocopy_tx to a generic
io_uring headers. This simplify the test case (last patch)

Patch 5: Protect io_uring_cmd_sock() to not be called if CONFIG_NET is
disabled.

Important to say that userspace pointers need to be alive until the
operation is completed, as in the systemcall.

These changes were tested with a new test[1] in liburing, LTP sockopt*
tests, as also with bpf/progs/sockopt test case, which is now adapted to
run using both system calls and io_uring commands.

[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

V1 -> V2
	* Implemented the BPF part
	* Using user pointers from optval to avoid kmalloc in io_uring part.

V2 -> V3:
	* Break down __sys_setsockopt and reuse the core code, avoiding
	  duplicated code. This removed the requirement to expose
	  sock_use_custom_sol_socket().
	* Added io_uring test to selftests/bpf/sockopt.
	* Fixed compat argument, by passing it to the issue_flags.

V3 -> V4:
	* Rebase on top of commit 1ded5e5a5931b ("net: annotate data-races around sock->ops")
	* Also broke down __sys_setsockopt() to reuse the core function
	  from io_uring.
	* Create a new patch to return -EOPNOTSUPP if CONFIG_NET is
	  disabled
	* Added two SOL_SOCKET tests in bpf/prog_tests/sockopt.

V4 -> V5:
	* Do not use sockptr anymore, by changing the optlen getsock argument
	  to be a user pointer (instead of a kernel pointer). This change also drop
	  the limitation on getsockopt from previous versions, and now all
	  levels are supported.
	* Simplified the BPF sockopt test, since there is no more limitation on
	  the io_uring commands.
	* No more changes in the BPF subsystem.
	* Moved the optlen field in the SQE struct. It is now a pointer instead
	  of u32.

Breno Leitao (8):
  net/socket: Break down __sys_setsockopt
  net/socket: Break down __sys_getsockopt
  io_uring/cmd: Pass compat mode in issue_flags
  selftests/net: Extract uring helpers to be reusable
  io_uring/cmd: return -EOPNOTSUPP if net is disabled
  io_uring/cmd: Introduce SOCKET_URING_OP_GETSOCKOPT
  io_uring/cmd: Introduce SOCKET_URING_OP_SETSOCKOPT
  selftests/bpf/sockopt: Add io_uring support

 include/linux/io_uring.h                      |   1 +
 include/net/sock.h                            |   5 +
 include/uapi/linux/io_uring.h                 |  10 +
 io_uring/uring_cmd.c                          |  41 +++
 net/socket.c                                  |  89 ++++--
 tools/include/io_uring/mini_liburing.h        | 292 ++++++++++++++++++
 .../selftests/bpf/prog_tests/sockopt.c        |  95 +++++-
 tools/testing/selftests/net/Makefile          |   1 +
 .../selftests/net/io_uring_zerocopy_tx.c      | 268 +---------------
 9 files changed, 497 insertions(+), 305 deletions(-)
 create mode 100644 tools/include/io_uring/mini_liburing.h

-- 
2.34.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2023-09-12  9:37 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-11 10:33 [PATCH v5 0/8] io_uring: Initial support for {s,g}etsockopt commands Breno Leitao
2023-09-11 10:34 ` [PATCH v5 1/8] net/socket: Break down __sys_setsockopt Breno Leitao
2023-09-11 10:34 ` [PATCH v5 2/8] net/socket: Break down __sys_getsockopt Breno Leitao
2023-09-12  9:37   ` Paolo Abeni
2023-09-11 10:34 ` [PATCH v5 3/8] io_uring/cmd: Pass compat mode in issue_flags Breno Leitao
2023-09-11 15:42   ` Gabriel Krisman Bertazi
2023-09-11 10:34 ` [PATCH v5 4/8] selftests/net: Extract uring helpers to be reusable Breno Leitao
2023-09-11 10:34 ` [PATCH v5 5/8] io_uring/cmd: return -EOPNOTSUPP if net is disabled Breno Leitao
2023-09-11 15:53   ` Gabriel Krisman Bertazi
2023-09-11 16:46     ` Breno Leitao
2023-09-12  0:20       ` Gabriel Krisman Bertazi
2023-09-11 10:34 ` [PATCH v5 6/8] io_uring/cmd: Introduce SOCKET_URING_OP_GETSOCKOPT Breno Leitao
2023-09-11 10:34 ` [PATCH v5 7/8] io_uring/cmd: Introduce SOCKET_URING_OP_SETSOCKOPT Breno Leitao
2023-09-11 10:34 ` [PATCH v5 8/8] selftests/bpf/sockopt: Add io_uring support Breno Leitao

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.