[COMMITTERS] pgsql: Fix race condition with unprotected use of a latch pointervaria

Поиск
Список
Период
Сортировка
От Tom Lane
Тема [COMMITTERS] pgsql: Fix race condition with unprotected use of a latch pointervaria
Дата
Msg-id E1dzRVC-00028F-CU@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix race condition with unprotected use of a latch pointer variable.

Commit 597a87ccc introduced a latch pointer variable to replace use
of a long-lived shared latch in the shared WalRcvData structure.
This was not well thought out, because there are now hazards of the
pointer variable changing while it's being inspected by another
process.  This could obviously lead to a core dump in code like
if (WalRcv->latch)    SetLatch(WalRcv->latch);

and there's a more remote risk of a torn read, if we have any
platforms where reading/writing a pointer is not atomic.

An actual problem would occur only if the walreceiver process
exits (gracefully) while the startup process is trying to
signal it, but that seems well within the realm of possibility.

To fix, treat the pointer variable (not the referenced latch)
as being protected by the WalRcv->mutex spinlock.  There
remains a race condition that we could apply SetLatch to a
process latch that no longer belongs to the walreceiver, but
I believe that's harmless: at worst it'd cause an extra wakeup
of the next process to use that PGPROC structure.

Back-patch to v10 where the faulty code was added.

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

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/45f9d08684d954b0e514b69f270e763d2785dd53

Modified Files
--------------
src/backend/replication/walreceiver.c      | 19 +++++++++++++------
src/backend/replication/walreceiverfuncs.c |  7 +++++--
src/include/replication/walreceiver.h      | 17 +++++++++--------
3 files changed, 27 insertions(+), 16 deletions(-)


--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers

В списке pgsql-committers по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: [COMMITTERS] pgsql: Fix coding rules violations in walreceiver.c
Следующее
От: pgsql@postgresql.org
Дата:
Сообщение: [COMMITTERS] pgsql: Tag refs/tags/REL_10_0 was created