From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Fix core dump in ReorderBufferRestoreChange on alignment-picky p |
Date: | 2016-04-14 23:42:56 |
Message-ID: | E1aqquW-00039s-KH@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
Fix core dump in ReorderBufferRestoreChange on alignment-picky platforms.
When re-reading an update involving both an old tuple and a new tuple from
disk, reorderbuffer.c was careless about whether the new tuple is suitably
aligned for direct access --- in general, it isn't. We'd missed seeing
this in the buildfarm because the contrib/test_decoding tests exercise this
code path only a few times, and by chance all of those cases have old
tuples with length a multiple of 4, which is usually enough to make the
access to the new tuple's t_len safe. For some still-not-entirely-clear
reason, however, Debian's sparc build gets a bus error, as reported by
Christoph Berg; perhaps it's assuming 8-byte alignment of the pointer?
The lack of previous field reports is probably because you need all of
these conditions to trigger a crash: an alignment-picky platform (not
Intel), a transaction large enough to spill to disk, an update within
that xact that changes a primary-key field and has an odd-length old tuple,
and of course logical decoding tracing the transaction.
Avoid the alignment assumption by using memcpy instead of fetching t_len
directly, and add a test case that exposes the crash on picky platforms.
Back-patch to 9.4 where the bug was introduced.
Discussion: <20160413094117(dot)GC21485(at)msg(dot)credativ(dot)de>
Branch
------
REL9_4_STABLE
Details
-------
http://git.postgresql.org/pg/commitdiff/00456911f43ab3def50b70813aea645e979e1687
Modified Files
--------------
contrib/test_decoding/expected/ddl.out | 21 ++++++++++++++-------
contrib/test_decoding/sql/ddl.sql | 4 ++++
src/backend/replication/logical/reorderbuffer.c | 12 ++++++++++--
3 files changed, 28 insertions(+), 9 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Andres Freund | 2016-04-15 02:17:02 | Re: [COMMITTERS] pgsql: Allow Pin/UnpinBuffer to operate in a lockfree manner. |
Previous Message | Robert Haas | 2016-04-14 18:05:35 | Re: [COMMITTERS] pgsql: Code cleanup in the wake of recent LWLock refactoring. |