From 5e33e2b20662892df66fc66cd1cce9d0d6b0a496 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 22 Apr 2025 08:40:17 +0200 Subject: [PATCH] 6.14-stable patches added patches: io_uring-don-t-post-tag-cqes-on-file-buffer-registration-failure.patch --- ...-on-file-buffer-registration-failure.patch | 66 +++++++++++++++++++ queue-6.14/series | 1 + 2 files changed, 67 insertions(+) create mode 100644 queue-6.14/io_uring-don-t-post-tag-cqes-on-file-buffer-registration-failure.patch diff --git a/queue-6.14/io_uring-don-t-post-tag-cqes-on-file-buffer-registration-failure.patch b/queue-6.14/io_uring-don-t-post-tag-cqes-on-file-buffer-registration-failure.patch new file mode 100644 index 0000000000..64077035fa --- /dev/null +++ b/queue-6.14/io_uring-don-t-post-tag-cqes-on-file-buffer-registration-failure.patch @@ -0,0 +1,66 @@ +From dd48da6de203d67a3f9db2c6b5ec5dac0702ae25 Mon Sep 17 00:00:00 2001 +From: Pavel Begunkov +Date: Fri, 4 Apr 2025 15:46:34 +0100 +Subject: io_uring: don't post tag CQEs on file/buffer registration failure + +From: Pavel Begunkov + +Commit ab6005f3912fff07330297aba08922d2456dcede upstream. + +Buffer / file table registration is all or nothing, if it fails all +resources we might have partially registered are dropped and the table +is killed. If that happens, it doesn't make sense to post any rsrc tag +CQEs. That would be confusing to the application, which should not need +to handle that case. + +Cc: stable@vger.kernel.org +Signed-off-by: Pavel Begunkov +Fixes: 7029acd8a9503 ("io_uring/rsrc: get rid of per-ring io_rsrc_node list") +Link: https://lore.kernel.org/r/c514446a8dcb0197cddd5d4ba8f6511da081cf1f.1743777957.git.asml.silence@gmail.com +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman +--- + io_uring/rsrc.c | 17 ++++++++++++++++- + 1 file changed, 16 insertions(+), 1 deletion(-) + +--- a/io_uring/rsrc.c ++++ b/io_uring/rsrc.c +@@ -130,6 +130,18 @@ struct io_rsrc_node *io_rsrc_node_alloc( + return node; + } + ++static void io_clear_table_tags(struct io_rsrc_data *data) ++{ ++ int i; ++ ++ for (i = 0; i < data->nr; i++) { ++ struct io_rsrc_node *node = data->nodes[i]; ++ ++ if (node) ++ node->tag = 0; ++ } ++} ++ + __cold void io_rsrc_data_free(struct io_ring_ctx *ctx, struct io_rsrc_data *data) + { + if (!data->nr) +@@ -539,6 +551,7 @@ int io_sqe_files_register(struct io_ring + io_file_table_set_alloc_range(ctx, 0, ctx->file_table.data.nr); + return 0; + fail: ++ io_clear_table_tags(&ctx->file_table.data); + io_sqe_files_unregister(ctx); + return ret; + } +@@ -855,8 +868,10 @@ int io_sqe_buffers_register(struct io_ri + } + + ctx->buf_table = data; +- if (ret) ++ if (ret) { ++ io_clear_table_tags(&ctx->buf_table); + io_sqe_buffers_unregister(ctx); ++ } + return ret; + } + diff --git a/queue-6.14/series b/queue-6.14/series index 1b270dc525..f8486ec01d 100644 --- a/queue-6.14/series +++ b/queue-6.14/series @@ -217,3 +217,4 @@ drm-i915-dp-check-for-has_dsc_3engines-while-configuring-dsc-slices.patch drm-amd-display-dml2-use-vzalloc-rather-than-kzalloc.patch drm-amdgpu-fix-warning-of-drm_mm_clean.patch drm-mgag200-fix-value-in-vblkstr-register.patch +io_uring-don-t-post-tag-cqes-on-file-buffer-registration-failure.patch -- 2.47.3