pgsql: Prevent inconsistent use of stats entry for replication slots

From: Michael Paquier <michael(at)paquier(dot)xyz>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Prevent inconsistent use of stats entry for replication slots
Date: 2024-06-05 23:49:14
Message-ID: E1sF0NV-000AIk-Hw@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Prevent inconsistent use of stats entry for replication slots

Concurrent activity around replication slot creation and drop could
cause a replication slot to use a stats entry it should not have used
when created, triggering an assertion failure when retrieving this
inconsistent entry from the dshash table used by the stats facility.

The issue is that pgstat_drop_replslot() calls pgstat_drop_entry()
without checking the result. If pgstat_drop_entry() cannot free the
entry related to the object dropped, pgstat_request_entry_refs_gc()
should be called. AtEOXact_PgStat_DroppedStats() and surrounding
routines dropping stats entries already do that.

This is documented in pgstat_internal.h, but let's add a comment at the
top of pgstat_drop_entry() as that can be easy to miss.

Reported-by: Alexander Lakhin
Author: Floris Van Nee
Analyzed-by: Andres Freund
Discussion: https://postgr.es/m/17947-b9554521ad963c9c@postgresql.org
Backpatch-through: 15

Branch
------
REL_15_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/bfc44da2478954330233a8df8a146ee920400947

Modified Files
--------------
src/backend/utils/activity/pgstat_replslot.c | 5 +++--
src/backend/utils/activity/pgstat_shmem.c | 11 +++++++++++
2 files changed, 14 insertions(+), 2 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Bruce Momjian 2024-06-06 00:53:17 pgsql: doc PG 17 relnotes: adjust integer bin/oct funcs and psql tab
Previous Message Nathan Bossart 2024-06-05 20:35:43 pgsql: Fix documentation for POSIX semaphores.