Re: ExecAppendAsyncEventWait() in REL_14_STABLE can corrupt PG_exception_stack
Etsuro Fujita <etsuro.fujita@gmail.com>
From: Etsuro Fujita <etsuro.fujita@gmail.com>
To: Michael Paquier <michael@paquier.xyz>
Cc: Alexander Pyhalov <a.pyhalov@postgrespro.ru>,
Pgsql Hackers <pgsql-hackers@postgresql.org>
Date: 2024-03-21T10:59:50Z
Lists: pgsql-hackers
Attachments
- 0001-Avoid-corrupting-PG_exception_stack-in-ExecAppendAsy-v2.patch (application/octet-stream) patch v2-0001
On Sun, Feb 25, 2024 at 6:34 PM Etsuro Fujita <etsuro.fujita@gmail.com> wrote: > > On Fri, Feb 23, 2024 at 01:21:14PM +0300, Alexander Pyhalov wrote: > > > Recent commit 555276f8594087ba15e0d58e38cd2186b9f39f6d introduced final > > > cleanup of node->as_eventset in ExecAppendAsyncEventWait(). > > > Unfortunately, now this function can return in the middle of TRY/FINALLY > > > block, without restoring PG_exception_stack. > > > > > > We found this while working on our FDW. Unfortunately, I couldn't reproduce > > > the issue with postgres_fdw, but it seems it is also affected. > > I think this would happen when FDWs configure no events; IIRC I think > while the core allows them to do so, postgres_fdw does not do so, so > this would never happen with it. I was wrong; as you pointed out, this would affect postgres_fdw as well. See commit 1ec7fca85, which is my commit, but I forgot it completely. :-( As I said before, the patch looks good to me. I tweaked comments in ExecAppendAsyncEventWait() a bit. Attached is an updated patch. In the patch I also fixed a confusing comment in a related function in postgres_fdw.c about handling of the in-process request that might be useless to process. Sorry, it took more time than expected to get back to this thread. Best regards, Etsuro Fujita
Commits
-
Fix bogus coding in ExecAppendAsyncEventWait().
- e10ca95ff7db 14.12 landed
- 3f96d113ff84 15.7 landed
- f6f61a4bd9cc 16.3 landed
-
Fix resource leak when a FDW's ForeignAsyncRequest function fails
- 555276f85940 14.11 cited
-
postgres_fdw: Fix handling of pending asynchronous requests.
- 1ec7fca85921 15.0 cited
-
Add support for asynchronous execution.
- 27e1f14563cf 14.0 cited