Fix use-after-free issue in slot synchronization. master github/master
authorAmit Kapila <akapila@postgresql.org>
Wed, 3 Sep 2025 06:31:05 +0000 (06:31 +0000)
committerAmit Kapila <akapila@postgresql.org>
Wed, 3 Sep 2025 06:31:05 +0000 (06:31 +0000)
Author: Shlok Kyal <shlok.kyal.oss@gmail.com>
Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
Reviewed-by: Amit Kapila <amit.kapila16@gmail.com>
Backpatch-through: 18, where it was introduced
Discussion: https://postgr.es/m/CANhcyEXMrcEdzj-RNGJam0nJHM4y+ttdWsgUCFmXciM7BNKc7A@mail.gmail.com

src/backend/replication/logical/slotsync.c
src/backend/replication/slotfuncs.c

index f5501c106dcaf199449195fd6ccf2e3789621a07..9d0072a49ed6d091c92de4ead2f1f3e3fd3d89d2 100644 (file)
@@ -1476,7 +1476,6 @@ ReplSlotSyncWorkerMain(const void *startup_data, size_t startup_data_len)
     */
    wrconn = walrcv_connect(PrimaryConnInfo, false, false, false,
                            app_name.data, &err);
-   pfree(app_name.data);
 
    if (!wrconn)
        ereport(ERROR,
@@ -1484,6 +1483,8 @@ ReplSlotSyncWorkerMain(const void *startup_data, size_t startup_data_len)
                errmsg("synchronization worker \"%s\" could not connect to the primary server: %s",
                       app_name.data, err));
 
+   pfree(app_name.data);
+
    /*
     * Register the disconnection callback.
     *
index 69f4c6157c518896f83cc95c669056fd3f5d484b..b8f21153e7bb35d008a0eba2b95e67a26f54d492 100644 (file)
@@ -921,7 +921,6 @@ pg_sync_replication_slots(PG_FUNCTION_ARGS)
    /* Connect to the primary server. */
    wrconn = walrcv_connect(PrimaryConnInfo, false, false, false,
                            app_name.data, &err);
-   pfree(app_name.data);
 
    if (!wrconn)
        ereport(ERROR,
@@ -929,6 +928,8 @@ pg_sync_replication_slots(PG_FUNCTION_ARGS)
                errmsg("synchronization worker \"%s\" could not connect to the primary server: %s",
                       app_name.data, err));
 
+   pfree(app_name.data);
+
    SyncReplicationSlots(wrconn);
 
    walrcv_disconnect(wrconn);