Thread
Commits
-
Fix memory allocation size in RegisterExtensionExplainOption()
- 730c98d0382f 18.4 landed
- f7dc17aa9116 19 (unreleased) landed
-
[BUGFIX] Fix crash due to sizeof bug in RegisterExtensionExplainOption
Joel Jacobson <joel@compiler.org> — 2026-03-01T17:10:10Z
Hi hackers, The allocations in src/backend/commands/explain_state.c used sizeof(char *) instead of sizeof(ExplainExtensionOption), which could cause a crash if an extension would register more than 8 extension EXPLAIN options: Attached small example extension, test_explain_state.txt, to demonstrate the bug: LOAD 'test_explain_state'; LOAD EXPLAIN (test_explain_opt9) SELECT 1; server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. connection to server was lost /Joel
-
Re: [BUGFIX] Fix crash due to sizeof bug in RegisterExtensionExplainOption
Michael Paquier <michael@paquier.xyz> — 2026-03-02T03:18:17Z
On Sun, Mar 01, 2026 at 06:10:10PM +0100, Joel Jacobson wrote: > The allocations in src/backend/commands/explain_state.c > used sizeof(char *) instead of sizeof(ExplainExtensionOption), > which could cause a crash if an extension would register > more than 8 extension EXPLAIN options: Indeed, that's wrong as-is. The problem can be reproduced simply by saving more options into pg_overexplain, as well, leading to the same memory chunk issues. Will fix, thanks for the report. -- Michael
-
Re: [BUGFIX] Fix crash due to sizeof bug in RegisterExtensionExplainOption
Andreas Karlsson <andreas@proxel.se> — 2026-03-03T03:39:43Z
On 3/2/26 4:18 AM, Michael Paquier wrote: > On Sun, Mar 01, 2026 at 06:10:10PM +0100, Joel Jacobson wrote: >> The allocations in src/backend/commands/explain_state.c >> used sizeof(char *) instead of sizeof(ExplainExtensionOption), >> which could cause a crash if an extension would register >> more than 8 extension EXPLAIN options: > > Indeed, that's wrong as-is. The problem can be reproduced simply by > saving more options into pg_overexplain, as well, leading to the same > memory chunk issues. Will fix, thanks for the report. Shouldn't the patch have used repalloc_array()? If the code had done so in the first place the bug would never have happened. -- Andreas Karlsson Percona
-
Re: [BUGFIX] Fix crash due to sizeof bug in RegisterExtensionExplainOption
Michael Paquier <michael@paquier.xyz> — 2026-03-03T04:13:11Z
On Tue, Mar 03, 2026 at 04:39:43AM +0100, Andreas Karlsson wrote: > Shouldn't the patch have used repalloc_array()? If the code had done so in > the first place the bug would never have happened. I was considering that first. However, after looked at the MemoryContextAlloc() and the inconsistency that repalloc_array() was bringing, I have turned the thought away. -- Michael
-
Re: [BUGFIX] Fix crash due to sizeof bug in RegisterExtensionExplainOption
Andreas Karlsson <andreas@proxel.se> — 2026-03-03T04:14:55Z
On 3/3/26 5:13 AM, Michael Paquier wrote: > On Tue, Mar 03, 2026 at 04:39:43AM +0100, Andreas Karlsson wrote: >> Shouldn't the patch have used repalloc_array()? If the code had done so in >> the first place the bug would never have happened. > > I was considering that first. However, after looked at the > MemoryContextAlloc() and the inconsistency that repalloc_array() was > bringing, I have turned the thought away. Ah, makes sense but then the question is if we should make MemoryContextAlloc() more consistent with palloc() but that is a bigger question than just this small bugfix. Andreas