Re: Fix segfault while accessing half-initialized hash table in pgstat_shmem.c

Mikhail Kot <mikhail.kot@databricks.com>

From: Mikhail Kot <mikhail.kot@databricks.com>
To: pgsql-hackers@lists.postgresql.org
Cc: to@myrrc.dev
Date: 2025-09-03T21:39:04Z
Lists: pgsql-hackers

Attachments

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

Commits

  1. Fix corruption of pgstats shared hashtable due to OOM failures