pgsql: Fix wrong validation of top-parent pointer during page deletion

From: Teodor Sigaev <teodor(at)sigaev(dot)ru>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix wrong validation of top-parent pointer during page deletion
Date: 2018-04-23 12:55:50
Message-ID: E1fAb0Y-0001CK-3O@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix wrong validation of top-parent pointer during page deletion in Btree.

After introducing usage of t_tid of inner or page high key for storing
number of attributes of tuple, validation of tuple's ItemPointer with
ItemPointerIsValid becomes incorrect, it's need to validate only blocknumber of
ItemPointer. Missing this causes a incorrect page deletion, fix that. Test is
added.

BTW, current contrib/amcheck doesn't fail on index corrupted by this way.

Also introduce BTreeTupleGetTopParent/BTreeTupleSetTopParent macroses to improve
code readability and to avoid possible confusion with page high key: high key
is used to store top-parent link for branch to remove.

Bug found by Michael Paquier, but bug doesn't exist in previous versions because
t_tid was set to P_HIKEY.

Author: Teodor Sigaev
Reviewer: Peter Geoghegan
Discussion: https://www.postgresql.org/message-id/flat/20180419052436.GA16000%40paquier.xyz

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/6db4b49986be3fe59a1f6ba6fabf9852864efc3e

Modified Files
--------------
src/backend/access/nbtree/nbtpage.c | 21 ++++++++-------------
src/backend/access/nbtree/nbtxlog.c | 12 ++----------
src/include/access/nbtree.h | 14 ++++++++++++++
src/test/regress/expected/create_index.out | 10 ++++++++++
src/test/regress/expected/sanity_check.out | 1 +
src/test/regress/sql/create_index.sql | 11 +++++++++++
6 files changed, 46 insertions(+), 23 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Teodor Sigaev 2018-04-23 13:55:30 pgsql: Update trigram example in docs to correct state
Previous Message Heikki Linnakangas 2018-04-23 08:48:46 pgsql: Make PGJIT_* macros safer.