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

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==


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

Attachment
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



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


Attachment