History

io_uring: Fix race for sqes with userspace

io_ring_submit() finalises with 1. io_commit_sqring(), which releases sqes to the userspace 2. Then calls to io_queue_link_head(), accessing released head's sqe Reorder them.

Pavel Begunkov committed 7 years ago

Commit 935d1e41 parent fb5ccc91 file · +2 −1Browse files

Unified · Split

fs/io_uring.c+2−1
@@ -2795,13 +2795,14 @@ out: · 2794 unmodified lines
27952795 submit++;
27962796 io_submit_sqe(ctx, &s, statep, &link);
27972797 }
2798− io_commit_sqring(ctx);
27992798
28002799 if (link)
28012800 io_queue_link_head(ctx, link, &link->submit, shadow_req);
28022801 if (statep)
28032802 io_submit_state_end(statep);
28042803
2804+ io_commit_sqring(ctx);
2805+
28052806 return submit;
28062807 }
28072808