Re: BUG #17462: Invalid memory access in heapam_tuple_lock
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: anisimow.d@gmail.com, pgsql-bugs@lists.postgresql.org
Date: 2022-04-11T19:40:51Z
Lists: pgsql-bugs
Hi, On 2022-04-11 15:25:12 -0400, Tom Lane wrote: > Andres Freund <andres@anarazel.de> writes: > > Another approach is to extend the SatisfiesDirty approach and store the tid of > > the next tuple version in addition the xmin/xmax we already store. And have > > heap_fetch() always set t_data to NULL if the snapshot check fails. > > That seems like a fairly clean idea, although I think we can't use it > in the back branches without an ABI break. We're not going to find a > TID's worth of padding space in struct SnapshotData. Right. There's enough space on x86-64, just not contiuous. But not on 32bit x86, so even if we were willing to live with the ugliness of splitting ItemPointerData across fields temporarily (which I don't think we would)... I guess we could put members of SnapshotData into a union with ItemPointerData that aren't used by InitDirtySnapshot()/HeapTupleSatisfiesDirty(). E.g. ph_node - which fairly fundamentally won't be used by dirty snapshots, and seems unlikely to be used by any extensions? And even if, it'd cause a compile-time breakage for such extensions, not a silent ABI breakage... Greetings, Andres Freund
Commits
-
Prevent access to no-longer-pinned buffer in heapam_tuple_lock().
- 7b7ed046cb2a 15.0 landed
- e0ed20d0b66e 12.11 landed
- c590e514a90d 14.3 landed
- 44096c31eaf0 13.7 landed
-
Add Valgrind buffer access instrumentation.
- 1e0dfd166b3f 14.0 cited
-
tableam: Add tuple_{insert, delete, update, lock} and use.
- 5db6df0c0117 12.0 cited