pgsql: Fix local pgstat entry leak on OOM during entry creation - Mailing list pgsql-committers

From Michael Paquier
Subject pgsql: Fix local pgstat entry leak on OOM during entry creation
Date
Msg-id E1wsD40-00000000XAu-0MBt@gemulon.postgresql.org
Whole thread
List pgsql-committers
Fix local pgstat entry leak on OOM during entry creation

When pgstat_init_entry() fails due to an OOM in the DSA allocation,
pgstat_get_entry_ref() cleaned up the shared hashtable but forgot to
remove the local reference that pgstat_get_entry_ref_cached() had
already inserted into pgStatEntryRefHash.

Missing this cleanup would leave a backend with a stale local cache
entry whose entry_ref points to a NULL shared_stats.  If
pgstat_gc_entry_refs() runs with this reference still around, it would
crash due to a pointer dereference.

The local reference is now removed before removing the shared entry,
the order being sensitive to pending interrupts.

Oversight in 8191e0c16a03.

Author: Niall Newman <nn@turacolabs.com>
Discussion: https://postgr.es/m/2FDAA194-9CF3-4FD7-A450-F1A4BEB125F6@turacolabs.com
Backpatch-through: 15

Branch
------
REL_19_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/89fc6a7c12f2ee6d75e6ebab06844edd4737c348

Modified Files
--------------
src/backend/utils/activity/pgstat_shmem.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)


pgsql-committers by date:

Previous
From: Melanie Plageman
Date:
Subject: pgsql: Restore vacuum failsafe abandonment of buffer access strategy
Next
From: Amit Langote
Date:
Subject: pgsql: Remove stale comment on ri_FastPathCheck()