pgsql: Fix tuple_data_split() to not open a relation without any lock.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix tuple_data_split() to not open a relation without any lock.
Date: 2018-10-01 15:51:33
Message-ID: E1g70Tt-00044p-P3@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix tuple_data_split() to not open a relation without any lock.

contrib/pageinspect's tuple_data_split() function thought it could get
away with opening the referenced relation with NoLock. In practice
there's no guarantee that the current session holds any lock on that
rel (even if we just read a page from it), so that this is unsafe.

Switch to using AccessShareLock. Also, postpone closing the relation,
so that we needn't copy its tupdesc. Also, fix unsafe use of
att_isnull() for attributes past the end of the tuple.

Per testing with a patch that complains if we open a relation without
holding any lock on it. I don't plan to back-patch that patch, but we
should close the holes it identifies in all supported branches.

Discussion: https://postgr.es/m/2038.1538335244@sss.pgh.pa.us

Branch
------
master

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

Modified Files
--------------
contrib/pageinspect/heapfuncs.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2018-10-01 16:43:34 pgsql: Add assertions that we hold some relevant lock during relation o
Previous Message Peter Eisentraut 2018-10-01 12:13:47 pgsql: doc: Clarify CREATE TABLESPACE documentation