Thread

  1. BUG #19020: BufFileDumpBuffer writes uninitialized data on executing hash join

    PG Bug reporting form <noreply@postgresql.org> — 2025-08-16T12:00:01Z

    The following bug has been logged on the website:
    
    Bug reference:      19020
    Logged by:          Alexander Lakhin
    Email address:      exclusion@gmail.com
    PostgreSQL version: 18beta3
    Operating system:   Ubuntu 24.04
    Description:        
    
    The following script, when executed under Valgrind:
    CREATE TABLE tenk1 (
                    unique1         int4,
                    unique2         int4,
                    two                     int4,
                    stud_emp                int4,
                    ten                     int4,
                    twenty          int4,
                    hundred         int4,
                    thousand        int4,
                    twothousand     int4,
                    fivethous       int4,
                    tenthous        int4,
                    odd                     int4,
                    even            int4,
                    stringu1        name,
                    stringu2        name,
                    string4         name
            );
    
    COPY tenk1 FROM '.../src/test/regress/data/tenk.data';
    VACUUM ANALYZE tenk1;
    
    SET work_mem = '64kB';
    SELECT COUNT(*) FROM tenk1 JOIN generate_series(1, 1300) g ON unique1 = g;
    
    triggers an error:
    ==00:00:00:06.424 2914013== Syscall param pwrite64(buf) points to
    uninitialised byte(s)
    ==00:00:00:06.424 2914013==    at 0x4FF8517: pwrite (pwrite64.c:25)
    ==00:00:00:06.424 2914013==    by 0x7C10E8: pg_pwritev (pg_iovec.h:101)
    ==00:00:00:06.424 2914013==    by 0x7C3BD1: FileWriteV (fd.c:2293)
    ==00:00:00:06.424 2914013==    by 0x7BEB0A: FileWrite (fd.h:219)
    ==00:00:00:06.424 2914013==    by 0x7BF685: BufFileDumpBuffer
    (buffile.c:538)
    ==00:00:00:06.424 2914013==    by 0x7BFC6A: BufFileFlush (buffile.c:724)
    ==00:00:00:06.424 2914013==    by 0x7BF841: BufFileReadCommon
    (buffile.c:600)
    ==00:00:00:06.424 2914013==    by 0x7BFACD: BufFileReadMaybeEOF
    (buffile.c:667)
    ==00:00:00:06.424 2914013==    by 0x54FC94: ExecHashJoinGetSavedTuple
    (nodeHashjoin.c:1476)
    ==00:00:00:06.424 2914013==    by 0x54F140: ExecHashJoinOuterGetTuple
    (nodeHashjoin.c:1042)
    ==00:00:00:06.424 2914013==    by 0x54E139: ExecHashJoinImpl
    (nodeHashjoin.c:432)
    ==00:00:00:06.424 2914013==    by 0x54E7D2: ExecHashJoin
    (nodeHashjoin.c:690)
    ==00:00:00:06.424 2914013==  Address 0x11dc8a88 is 80 bytes inside a block
    of size 8,264 client-defined
    ==00:00:00:06.424 2914013==    at 0xA651F2: palloc (mcxt.c:1389)
    ==00:00:00:06.424 2914013==    by 0x7BEB39: makeBufFileCommon
    (buffile.c:120)
    ==00:00:00:06.424 2914013==    by 0x7BEBB1: makeBufFile (buffile.c:141)
    ==00:00:00:06.424 2914013==    by 0x7BED3C: BufFileCreateTemp
    (buffile.c:212)
    ==00:00:00:06.424 2914013==    by 0x54FBE6: ExecHashJoinSaveTuple
    (nodeHashjoin.c:1437)
    ==00:00:00:06.424 2914013==    by 0x54E309: ExecHashJoinImpl
    (nodeHashjoin.c:494)
    ==00:00:00:06.424 2914013==    by 0x54E7D2: ExecHashJoin
    (nodeHashjoin.c:690)
    ==00:00:00:06.424 2914013==    by 0x521ED9: ExecProcNodeFirst
    (execProcnode.c:469)
    ==00:00:00:06.424 2914013==    by 0x533ADB: ExecProcNode (executor.h:315)
    ==00:00:00:06.424 2914013==    by 0x5340B1: fetch_input_tuple
    (nodeAgg.c:563)
    ==00:00:00:06.424 2914013==    by 0x5377C9: agg_retrieve_direct
    (nodeAgg.c:2450)
    ==00:00:00:06.424 2914013==    by 0x537399: ExecAgg (nodeAgg.c:2265)
    ==00:00:00:06.424 2914013==
    ...
    ==00:00:00:06.496 2915423== Exit program on first error
    (--exit-on-first-error=yes)
    2025-08-16 11:28:47.537 UTC [2915382] LOG:  client backend (PID 2915423)
    exited with exit code 1
    2025-08-16 11:28:47.537 UTC [2915382] DETAIL:  Failed process was running:
    SELECT COUNT(*) FROM tenk1 JOIN generate_series(1, 1300) g ON unique1 = g;
    
    Reproduced on REL_13_STABLE .. master.
    
    
  2. Re: BUG #19020: BufFileDumpBuffer writes uninitialized data on executing hash join

    Tom Lane <tgl@sss.pgh.pa.us> — 2025-08-16T14:11:24Z

    PG Bug reporting form <noreply@postgresql.org> writes:
    > ==00:00:00:06.424 2914013== Syscall param pwrite64(buf) points to
    > uninitialised byte(s)
    > ==00:00:00:06.424 2914013==    at 0x4FF8517: pwrite (pwrite64.c:25)
    > ==00:00:00:06.424 2914013==    by 0x7C10E8: pg_pwritev (pg_iovec.h:101)
    > ==00:00:00:06.424 2914013==    by 0x7C3BD1: FileWriteV (fd.c:2293)
    > ==00:00:00:06.424 2914013==    by 0x7BEB0A: FileWrite (fd.h:219)
    > ==00:00:00:06.424 2914013==    by 0x7BF685: BufFileDumpBuffer
    > (buffile.c:538)
    
    Looks like this path needs to be added to the suppressions in
    src/tools/valgrind.supp.  I'm a bit surprised that the buildfarm
    hasn't already shown this up.
    
    			regards, tom lane