Re: [PATCH liburing 1/2] test/send_recvmsg: Preserve msghdr until op_recvmsg completes

Gabriel Krisman Bertazi <[email protected]> Sun, 26 Jul 2026 20:13:37 -0400
Newsgroups org.kernel.vger.io-uring
Organization SUSE
Message-ID <[email protected]>
Gabriel Krisman Bertazi <[email protected]> writes:

> Gabriel Krisman Bertazi <[email protected]> writes:
>
>> Jens Axboe <[email protected]> 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.

Hello, do you disagree or did I miss anything?

-- 
Gabriel Krisman Bertazi