pgsql: Fix segment_bins corruption in dsa.c. - Mailing list pgsql-committers

From Thomas Munro
Subject pgsql: Fix segment_bins corruption in dsa.c.
Date
Msg-id E1g2qee-0002dR-BQ@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix segment_bins corruption in dsa.c.

If a segment has been freed by dsa.c because it is entirely empty, other
backends must make sure to unmap it before following links to new
segments that might happen to have the same index number, or they could
finish up looking at a defunct segment and then corrupt the segment_bins
lists.  The correct protocol requires checking freed_segment_counter
after acquiring the area lock and before resolving any index number to a
segment.  Add the missing checks and an assertion.

Back-patch to 10, where dsa.c first arrived.

Author: Thomas Munro
Reported-by: Tomas Vondra
Discussion: https://postgr.es/m/CAEepm%3D0thg%2Bja5zGVa7jBy-uqyHrTqTm8HGhEOtMmigGrAqTbw%40mail.gmail.com

Branch
------
REL_10_STABLE

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

Modified Files
--------------
src/backend/utils/mmgr/dsa.c | 50 +++++++++++++++++++++++++++++++++++++++-----
1 file changed, 45 insertions(+), 5 deletions(-)


pgsql-committers by date:

Previous
From: Thomas Munro
Date:
Subject: pgsql: Fix segment_bins corruption in dsa.c.
Next
From: Alexander Korotkov
Date:
Subject: pgsql: Fix handling of format string text characters into_timestamp()/