Re: 回复: Fix segfault while accessing half-initialized hash table in pgstat_shmem.c
Rider <oceanustz@gmail.com>
From: Rider <oceanustz@gmail.com>
To: Steven Niu <niushiji@gmail.com>
Cc: Michael Paquier <michael@paquier.xyz>,
Mikhail Kot <mikhail.kot@databricks.com>, "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>,
"to@myrrc.dev" <to@myrrc.dev>
Date: 2025-09-04T07:49:19Z
Lists: pgsql-hackers
Hi Steven, I think when an error is thrown within the PG_TRY block, the assignment to shheader is interrupted and never completes. As a result, shheader retains its initial, NULL value. And, the PG_RE_THROW() within the PG_CATCH block causes a non-local jump, immediately aborting the current execution path to handle the error at a higher level. This guarantees that the code following PG_END_TRY is unreachable in the error scenario. Steven Niu <niushiji@gmail.com> 于2025年9月4日周四 15:38写道: > _______________________________________ > From: Michael Paquier > Sent: Thursday, September 04, 2025 14:30 > To: Steven Niu > Cc: Mikhail Kot; pgsql-hackers@lists.postgresql.org; to@myrrc.dev > Subject: Re: 回复: Fix segfault while accessing half-initialized hash table > in pgstat_shmem.c > > On Thu, Sep 04, 2025 at 02:31:34AM +0000, Steven Niu wrote: > > If pgstat_init_entry() errors on OOM, what would it returns to shheader, > NULL? > > That would bring trouble to dshash_delete_entry(). > > Based on the proposal of patch 0002, the code would throw an error > after cleaning up the shared memory state. The generation and > refcount number assigned inside pgstat_init_entry() would not matter > as well because the entry created by dshash_find_or_insert() would be > entirely gone. So I am not sure what's the point you are trying to > make here. > -- > Michael > > > Sorry, I made a mistake. I should say: > "If pgstat_init_entry() errors on OOM, the local variable shheader may be > NULL. This would bring trouble to pgstat_acquire_entry_ref() in the line 30 > of patch 002". >
Commits
-
Fix corruption of pgstats shared hashtable due to OOM failures
- 1852ec5db5d8 15.15 landed
- 12f57681c79b 16.11 landed
- 3e6dfcfb0529 17.7 landed
- f256a7bba728 18.0 landed
- 8191e0c16a03 19 (unreleased) landed