回复: Fix segfault while accessing half-initialized hash table in pgstat_shmem.c - Mailing list pgsql-hackers

From Steven Niu
Subject 回复: Fix segfault while accessing half-initialized hash table in pgstat_shmem.c
Date
Msg-id MN2PR15MB30215EAE9A13895A53A856ACA700A@MN2PR15MB3021.namprd15.prod.outlook.com
Whole thread Raw
In response to Re: Fix segfault while accessing half-initialized hash table in pgstat_shmem.c  (Mikhail Kot <mikhail.kot@databricks.com>)
Responses Re: 回复: Fix segfault while accessing half-initialized hash table in pgstat_shmem.c
List pgsql-hackers
Hi, Mikhail, 

If pgstat_init_entry() errors on OOM, what would it returns to shheader, NULL? 
That would bring trouble to dshash_delete_entry(). 

Thanks,
Steven



发件人: Mikhail Kot <mikhail.kot@databricks.com>
已发送: 2025 年 9 月 04 日 星期四 05:39
收件人: pgsql-hackers@lists.postgresql.org <pgsql-hackers@lists.postgresql.org>
抄送: to@myrrc.dev <to@myrrc.dev>
主题: Re: Fix segfault while accessing half-initialized hash table in pgstat_shmem.c

Hi Michael, Steven, and Ranier,

> Anyway, couldn't we flip the order of the operations in
pgstat_init_entry() so as we do first an allocation and avoid any inconsistency
in the shared state?

The issue is not only in pgstat_init_entry(). Currently it errors on OOM but
this doesn't prevent us from calling pgstat_lock_entry() through
pgstat_get_entry_ref() which accesses a non-initialized lock.

Here's the second version of the patch. Now we remove inserted hash entry
on OOM which would prevent accessing the entry

pgsql-hackers by date:

Previous
From: Peter Geoghegan
Date:
Subject: Re: Orphan page in _bt_split
Next
From: kasaharatt
Date:
Subject: Re: Add log_autovacuum_{vacuum|analyze}_min_duration