BUG #16466: Valgrind detects an invalid read in dblink_open() with a cursor inside a transaction

Started by PG Bug reporting formalmost 6 years ago4 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 16466
Logged by: Alexander Lakhin
Email address: exclusion@gmail.com
PostgreSQL version: 13beta1
Operating system: Ubuntu 18.04
Description:

When running under valgrind the following query (based on
contrib/dblink/sql/dblink.sql):
CREATE EXTENSION dblink;
CREATE FUNCTION connection_parameters() RETURNS text LANGUAGE SQL AS $f$
SELECT $$dbname='$$||current_database()||$$'
port=$$||current_setting('port');
$f$;
SELECT dblink_connect('myconn',connection_parameters());
SELECT dblink_exec('myconn','BEGIN');
SELECT dblink_open('myconn','xxx','SELECT 1');

The following error is detected:
==00:00:00:07.723 2378719== Conditional jump or move depends on
uninitialised value(s)
==00:00:00:07.723 2378719== at 0x486A5D0: dblink_open (dblink.c:492)
==00:00:00:07.723 2378719== by 0x3BCA2B: ExecInterpExpr
(execExprInterp.c:699)
==00:00:00:07.723 2378719== by 0x3B97F0: ExecInterpExprStillValid
(execExprInterp.c:1802)
==00:00:00:07.723 2378719== by 0x3F3C05: ExecEvalExprSwitchContext
(executor.h:313)
==00:00:00:07.723 2378719== by 0x3F3C05: ExecProject (executor.h:347)
==00:00:00:07.723 2378719== by 0x3F3C05: ExecResult (nodeResult.c:136)
==00:00:00:07.723 2378719== by 0x3C90EC: ExecProcNodeFirst
(execProcnode.c:450)
==00:00:00:07.723 2378719== by 0x3C139B: ExecProcNode (executor.h:245)
==00:00:00:07.723 2378719== by 0x3C139B: ExecutePlan (execMain.c:1646)
==00:00:00:07.723 2378719== by 0x3C1FEC: standard_ExecutorRun
(execMain.c:364)
==00:00:00:07.723 2378719== by 0x3C20BA: ExecutorRun (execMain.c:308)
==00:00:00:07.723 2378719== by 0x55FED3: PortalRunSelect (pquery.c:912)
==00:00:00:07.723 2378719== by 0x5615C7: PortalRun (pquery.c:756)
==00:00:00:07.723 2378719== by 0x55D8F0: exec_simple_query
(postgres.c:1239)
==00:00:00:07.723 2378719== by 0x55F7F5: PostgresMain (postgres.c:4315)
==00:00:00:07.724 2378719==

#2Joe Conway
mail@joeconway.com
In reply to: PG Bug reporting form (#1)
Re: BUG #16466: Valgrind detects an invalid read in dblink_open() with a cursor inside a transaction

On 5/27/20 2:00 PM, PG Bug reporting form wrote:

The following bug has been logged on the website:

Bug reference: 16466
Logged by: Alexander Lakhin
Email address: exclusion@gmail.com
PostgreSQL version: 13beta1
Operating system: Ubuntu 18.04
Description:

When running under valgrind the following query (based on
contrib/dblink/sql/dblink.sql):
CREATE EXTENSION dblink;
CREATE FUNCTION connection_parameters() RETURNS text LANGUAGE SQL AS $f$
SELECT $$dbname='$$||current_database()||$$'
port=$$||current_setting('port');
$f$;
SELECT dblink_connect('myconn',connection_parameters());
SELECT dblink_exec('myconn','BEGIN');
SELECT dblink_open('myconn','xxx','SELECT 1');

The following error is detected:
==00:00:00:07.723 2378719== Conditional jump or move depends on
uninitialised value(s)
==00:00:00:07.723 2378719== at 0x486A5D0: dblink_open (dblink.c:492)

Hmmm, looks like a couple of the members of rconn are left uninitialized.

When dblink_open() is called *without* an outer transaction it handles the
initialization for us, but *with* an outer transaction it does not :-(

I think the attached fixes it.

Joe

--
Crunchy Data - http://crunchydata.com
PostgreSQL Support for Secure Enterprises
Consulting, Training, & Open Source Development

Attachments:

dblink_uninit-vars_20200527.00.difftext/x-patch; charset=UTF-8; name=dblink_uninit-vars_20200527.00.diffDownload+5-0
#3Alexander Lakhin
exclusion@gmail.com
In reply to: Joe Conway (#2)
Re: BUG #16466: Valgrind detects an invalid read in dblink_open() with a cursor inside a transaction

Hello Joe,

27.05.2020 22:58, Joe Conway wrote:

Hmmm, looks like a couple of the members of rconn are left uninitialized.

When dblink_open() is called *without* an outer transaction it handles the
initialization for us, but *with* an outer transaction it does not :-(

I think the attached fixes it.

Yes, your patch makes valgrind silent.
Thanks!

Best regards,
Alexander

#4Joe Conway
mail@joeconway.com
In reply to: Alexander Lakhin (#3)
Re: BUG #16466: Valgrind detects an invalid read in dblink_open() with a cursor inside a transaction

On 5/27/20 5:00 PM, Alexander Lakhin wrote:

Hello Joe,

27.05.2020 22:58, Joe Conway wrote:

Hmmm, looks like a couple of the members of rconn are left uninitialized.

When dblink_open() is called *without* an outer transaction it handles the
initialization for us, but *with* an outer transaction it does not :-(

I think the attached fixes it.

Yes, your patch makes valgrind silent.
Thanks!

Thanks for checking! Pushed to all supported branches.

Joe

--
Crunchy Data - http://crunchydata.com
PostgreSQL Support for Secure Enterprises
Consulting, Training, & Open Source Development