pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Remove race conditions between ECPGdebug() and ecpg_log().
Date: Thu, 23 May 2024 19:52:27 +0000
Message-ID: <E1sAEUF-001Ufg-6i@gemulon.postgresql.org> (raw)

Remove race conditions between ECPGdebug() and ecpg_log().

Coverity complains that ECPGdebug is accessing debugstream without
holding debug_mutex, which is a fair complaint: we should take
debug_mutex while changing the settings ecpg_log looks at.

In some branches it also complains about unlocked use of simple_debug.
I think it's intentional and safe to have a quick unlocked check of
simple_debug at the start of ecpg_log, since that early exit will
always be taken in non-debug cases.  But we should recheck
simple_debug after acquiring the mutex.  In the worst case, calling
ECPGdebug concurrently with ecpg_log in another thread could result
in a null-pointer dereference due to debugstream transiently being
NULL while simple_debug isn't 0.

This is largely hypothetical, since it's unlikely anybody uses
ECPGdebug() at all in the field, and our own regression tests
don't seem to be hitting the theoretical race conditions either.
Still, if we're going to the trouble of having mutexes here, we ought
to be using them in a way that's actually safe not just almost safe.
Hence, back-patch to all supported branches.

Branch
------
REL_13_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/2e062b65539ea9f85cf591ffbc4cd2db30bf5f51

Modified Files
--------------
src/interfaces/ecpg/ecpglib/misc.c | 41 ++++++++++++++++++++++++++++----------
1 file changed, 30 insertions(+), 11 deletions(-)



view thread (6+ messages)  latest in thread

Message-ID: <E1sAEUF-001Ufg-6i@gemulon.postgresql.org>
Permalink:  ../E1sAEUF-001Ufg-6i@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1sAEUF-001Ufg-6i@gemulon.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: tgl@sss.pgh.pa.us, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: Remove race conditions between ECPGdebug() and ecpg_log().
  In-Reply-To: <E1sAEUF-001Ufg-6i@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox