From: Gabriel Krisman Bertazi <krisman@suse.de>
To: Jens Axboe <axboe@kernel.dk>
Cc: io-uring@vger.kernel.org
Subject: Re: [PATCH liburing 1/2] test/send_recvmsg: Preserve msghdr until op_recvmsg completes
Date: Wed, 22 Jul 2026 16:33:12 -0400 [thread overview]
Message-ID: <87cxweepdj.fsf@mailhost.krisman.be> (raw)
In-Reply-To: <87fr1aeqwm.fsf@mailhost.krisman.be>
Gabriel Krisman Bertazi <krisman@suse.de> writes:
> Jens Axboe <axboe@kernel.dk> writes:
>
>> On 7/22/26 12:17 PM, Gabriel Krisman Bertazi wrote:
>>> msghdr is allocated on the stack at recv_prep, which means it may go out
>>> of scope before the kernel has a chance to complete the operation. This
>>> results in spurious test failures when we reach far enough into recv_fn
>>> to reuse the stack space before op_recvmsg executes. I found it easily
>>> reproducible when compiling with '-O0 -g3' to avoid gcc from optimizing
>>> further local variables out of the stack.
>>
>> Hmm, but that should be fine as long as a) we submit in scope, and b)
>> we're not using SQPOLL, where it does need to remain consistent until
>> completion.
>>
>> And recv_prep() certainly submits before it returns, and we're not using
>> SQPOLL. So I'm curious what issue this is?? Same questions on patch 2.
>
> Hm, I assumed it was submitted via iowq, which would explain this,
> because the execution in io_recvmsg() passes a pointer to the original
> memory:
So, __sys_recvmsg_sock during the inline attempt throws -EAGAIN at
first, which makes io_recv return IOU_RETRY, which punts to tw after
the socket is ready. By tracing, I can see the tw is executed only
during the io_uring_enter from io_uring_wait_cqe, which is when
__sys_recvmsg_sock touches sr->umsg pointing to an already out-of-scope
stack variable.
FWIW, I could only trace this with good old printk. Any
tracepoint/bpftrace made the issue disappear. I think that is because
with these tracing tools, we end up executing the tw inside the previous
io_uring_enter, since it took time to complete and the socket got ready in
the meantime.
>
>> --
>> Jens Axboe
>
> --
> Gabriel Krisman Bertazi
--
Gabriel Krisman Bertazi
next prev parent reply other threads:[~2026-07-22 20:33 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-22 18:17 [PATCH liburing 0/2] Fix op_recv stack corruption Gabriel Krisman Bertazi
2026-07-22 18:17 ` [PATCH liburing 1/2] test/send_recvmsg: Preserve msghdr until op_recvmsg completes Gabriel Krisman Bertazi
2026-07-22 18:24 ` Gabriel Krisman Bertazi
2026-07-22 19:21 ` Jens Axboe
2026-07-22 20:00 ` Gabriel Krisman Bertazi
2026-07-22 20:33 ` Gabriel Krisman Bertazi [this message]
2026-07-22 18:17 ` [PATCH liburing 2/2] test/recv-msgall-stream: " Gabriel Krisman Bertazi
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=87cxweepdj.fsf@mailhost.krisman.be \
--to=krisman@suse.de \
--cc=axboe@kernel.dk \
--cc=io-uring@vger.kernel.org \
/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.