aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2021-04-13 12:34:25 +1200
committerThomas Munro <tmunro@postgresql.org>2021-04-13 13:03:30 +1200
commit16175e278763e88618c814b6489c4ae795501282 (patch)
tree72a4918f884844b450c4338b426c129592d63376
parent8a7bd1e6cba37170afadcb252da3cf9c5386ef06 (diff)
downloadpostgresql-16175e278763e88618c814b6489c4ae795501282.tar.gz
postgresql-16175e278763e88618c814b6489c4ae795501282.zip
Fix potential SSI hazard in heap_update().
Commit 6f38d4dac38 failed to heed a warning about the stability of the value pointed to by "otid". The caller is allowed to pass in a pointer to newtup->t_self, which will be updated during the execution of the function. Instead, the SSI check should use the value we copy into oldtup.t_self near the top of the function. Not a live bug, because newtup->t_self doesn't really get updated until a bit later, but it was confusing and broke the rule established by the comment. Back-patch to 13. Reported-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/2689164.1618160085%40sss.pgh.pa.us
-rw-r--r--src/backend/access/heap/heapam.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index e13f0a86103..7b2c19b468a 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -3561,7 +3561,8 @@ l2:
* will include checking the relation level, there is no benefit to a
* separate check for the new tuple.
*/
- CheckForSerializableConflictIn(relation, otid, BufferGetBlockNumber(buffer));
+ CheckForSerializableConflictIn(relation, &oldtup.t_self,
+ BufferGetBlockNumber(buffer));
/*
* At this point newbuf and buffer are both pinned and locked, and newbuf