FAILED: patch "[PATCH] io_uring/af_unix: disable sending io_uring over sockets" failed to apply to 5.15-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 705318a99a138c29a512a72c3e0043b3cd7f55f4
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023120911-ecosystem-diary-c2b7@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
705318a99a13 ("io_uring/af_unix: disable sending io_uring over sockets") 38eddb2c75fb ("io_uring: remove FFS_SCM")
735729844819 ("io_uring: move rsrc related data, core, and commands") 3b77495a9723 ("io_uring: split provided buffers handling into its own file") 7aaff708a768 ("io_uring: move cancelation into its own file") 329061d3e2f9 ("io_uring: move poll handling into its own file") cfd22e6b3319 ("io_uring: add opcode name to io_op_defs") 92ac8beaea1f ("io_uring: include and forward-declaration sanitation") c9f06aa7de15 ("io_uring: move io_uring_task (tctx) helpers into its own file") a4ad4f748ea9 ("io_uring: move fdinfo helpers to its own file") e5550a1447bf ("io_uring: use io_is_uring_fops() consistently") 17437f311490 ("io_uring: move SQPOLL related handling into its own file") 59915143e89f ("io_uring: move timeout opcodes and handling into its own file") e418bbc97bff ("io_uring: move our reference counting into a header") 36404b09aa60 ("io_uring: move msg_ring into its own file") f9ead18c1058 ("io_uring: split network related opcodes into its own file") e0da14def1ee ("io_uring: move statx handling to its own file") a9c210cebe13 ("io_uring: move epoll handler to its own file") 4cf90495281b ("io_uring: add a dummy -EOPNOTSUPP prep handler") 99f15d8d6136 ("io_uring: move uring_cmd handling to its own file")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 705318a99a138c29a512a72c3e0043b3cd7f55f4 Mon Sep 17 00:00:00 2001
From: Pavel Begunkov <[email protected]>
Date: Wed, 6 Dec 2023 13:26:47 +0000
Subject: [PATCH] io_uring/af_unix: disable sending io_uring over sockets
File reference cycles have caused lots of problems for io_uring in the past, and it still doesn't work exactly right and races with unix_stream_read_generic(). The safest fix would be to completely disallow sending io_uring files via sockets via SCM_RIGHT, so there are no possible cycles invloving registered files and thus rendering SCM accounting on the io_uring side unnecessary.
io_uring/rsrc.h +0 -7
@@ -77,17 +77,10 @@ int io_sqe_files_register(struct io_ring_ctx *ctx, void __user *arg,int __io_scm_file_account (struct io_ring_ctx *ctx,struct file *file); -#if defined(CONFIG_UNIX ) -static inline bool io_file_need_scm (struct file *filp) -{ -return !!unix_get_socket (filp); -} -#else static inline bool io_file_need_scm (struct file *filp) {return false; } -#endif static inline int io_scm_file_account (struct io_ring_ctx *ctx,struct file *file)
net/core/scm.c +6 -0
@@ -26,6 +26,7 @@#include <linux/nsproxy.h> #include <linux/slab.h> #include <linux/errqueue.h> +#include <linux/io_uring.h> #include <linux/uaccess.h>
@@ -103,6 +104,11 @@ static int scm_fp_copy(struct cmsghdr *cmsg, struct scm_fp_list **fplp)if (fd <0 || !(file =fget_raw (fd)))return -EBADF ; +/* don't allow io_uring files */ +if (io_uring_get_socket (file)) { +fput (file); +return -EINVAL ; + } *fpp++ = file; fpl->count++; }
Jens Axboe
maintainerQuoted 6 lines · On 12/9/23 5:03 AM, [email protected] wrote:
The patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Quoted 8 lines
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkoutFETCH_HEAD
git cherry-pick -x705318a99a138c29a512a72c3e0043b3cd7f55f4
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023120911-ecosystem-diary-c2b7@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Here's one for 5.10 and 5.15 stable.
Signature · 1 line
Jens Axboe
From 2ad25288b0f67d4a5120fe9fe6279ef6635bb986 Mon Sep 17 00:00:00 2001
From: Pavel Begunkov <[email protected]>
Date: Wed, 6 Dec 2023 13:26:47 +0000
Subject: [PATCH] io_uring/af_unix: disable sending io_uring over sockets
commit 705318a99a138c29a512a72c3e0043b3cd7f55f4 upstream.
File reference cycles have caused lots of problems for io_uring in the past, and it still doesn't work exactly right and races with unix_stream_read_generic(). The safest fix would be to completely disallow sending io_uring files via sockets via SCM_RIGHT, so there are no possible cycles invloving registered files and thus rendering SCM accounting on the io_uring side unnecessary.
--- io_uring/io_uring.c | 55 --------------------------------------------- net/core/scm.c | 6 +++++ 2 files changed, 6 insertions(+), 55 deletions(-)
io_uring/io_uring.c +0 -55
@@ -8625,49 +8625,6 @@ static int io_sqe_files_register(struct io_ring_ctx *ctx, void __user *arg,return ret; } -static int io_sqe_file_register (struct io_ring_ctx *ctx,struct file *file, -int index) -{ -#if defined(CONFIG_UNIX ) -struct sock *sock = ctx->ring_sock->sk; -struct sk_buff_head *head = &sock->sk_receive_queue; -struct sk_buff *skb; - -/* -* See if we can merge this file into an existing skb SCM_RIGHTS -* file set. If there's no room, fall back to allocating a new skb -* and filling it in. -*/ -spin_lock_irq (&head->lock); - skb =skb_peek (head); -if (skb) { -struct scm_fp_list *fpl =UNIXCB (skb).fp; - -if (fpl->count <SCM_MAX_FD ) { -__skb_unlink (skb, head); -spin_unlock_irq (&head->lock); - fpl->fp[fpl->count] =get_file (file); -unix_inflight (fpl->user, fpl->fp[fpl->count]); - fpl->count++; -spin_lock_irq (&head->lock); -__skb_queue_head (head, skb); - }else { - skb =NULL ; - } - } -spin_unlock_irq (&head->lock); - -if (skb) { -fput (file); -return 0 ; - } - -return __io_sqe_files_scm (ctx,1 , index); -#else -return 0 ; -#endif -} -static int io_queue_rsrc_removal (struct io_rsrc_data *data,unsigned idx,struct io_rsrc_node *node,void *rsrc) {
@@ -8725,12 +8682,6 @@ static int io_install_fixed_file(struct io_kiocb *req, struct file *file, *io_get_tag_slot (ctx->file_data, slot_index) =0 ;io_fixed_file_set (file_slot, file); - ret =io_sqe_file_register (ctx, file, slot_index); -if (ret) { - file_slot->file_ptr =0 ; - goto err; - } - ret =0 ; err:if (needs_switch)
@@ -8844,12 +8795,6 @@ static int __io_sqe_files_update(struct io_ring_ctx *ctx, } *io_get_tag_slot (data, i) = tag;io_fixed_file_set (file_slot, file); - err =io_sqe_file_register (ctx, file, i); -if (err) { - file_slot->file_ptr =0 ; -fput (file); -break ; - } } }
net/core/scm.c +6 -0
@@ -26,6 +26,7 @@#include <linux/nsproxy.h> #include <linux/slab.h> #include <linux/errqueue.h> +#include <linux/io_uring.h> #include <linux/uaccess.h>
@@ -103,6 +104,11 @@ static int scm_fp_copy(struct cmsghdr *cmsg, struct scm_fp_list **fplp)if (fd <0 || !(file =fget_raw (fd)))return -EBADF ; +/* don't allow io_uring files */ +if (io_uring_get_socket (file)) { +fput (file); +return -EINVAL ; + } *fpp++ = file; fpl->count++; }
Signature · 1 line
2.42.0