pgsql: Fix race in SSI interaction with empty btrees.

From: Thomas Munro <tmunro(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix race in SSI interaction with empty btrees.
Date: 2023-07-03 21:58:12
Message-ID: E1qGRYi-001lrI-JC@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix race in SSI interaction with empty btrees.

When predicate-locking btrees, we have a special case for completely
empty btrees, since there is no page to lock. This was racy, because,
without buffer lock held, a matching key could be inserted between the
_bt_search() and the PredicateLockRelation() calls.

Fix, by rechecking _bt_search() after taking the relation-level SIREAD
lock, if using SERIALIZABLE isolation and an empty btree is discovered.

Back-patch to all supported releases. Fixes one aspect of bug #17949.

Reported-by: Artem Anisimov <artem(dot)anisimov(dot)255(at)gmail(dot)com>
Reviewed-by: Dmitry Dolgov <9erthalion6(at)gmail(dot)com>
Reviewed-by: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>
Discussion: https://postgr.es/m/17949-a0f17035294a55e2%40postgresql.org

Branch
------
master

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

Modified Files
--------------
src/backend/access/nbtree/nbtsearch.c | 39 +++++++++++++++++++++++------------
1 file changed, 26 insertions(+), 13 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Thomas Munro 2023-07-03 21:58:30 pgsql: Fix race in SSI interaction with empty btrees.
Previous Message Nathan Bossart 2023-07-03 20:20:00 pgsql: Don't truncate database and user names in startup packets.