]> granicus.if.org Git - postgresql/commitdiff
Allocate enough shared string memory for stats of auxiliary processes.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 11 Apr 2018 20:39:49 +0000 (23:39 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 11 Apr 2018 20:52:11 +0000 (23:52 +0300)
This fixes a bug whereby the st_appname, st_clienthostname, and
st_activity_raw fields for auxiliary processes point beyond the end of
their respective shared memory segments. As a result, the application_name
of a backend might show up as the client hostname of an auxiliary process.

Backpatch to v10, where this bug was introduced, when the auxiliary
processes were added to the array.

Author: Edmund Horner
Reviewed-by: Michael Paquier
Discussion: https://www.postgresql.org/message-id/CAMyN-kA7aOJzBmrYFdXcc7Z0NmW%2B5jBaf_m%3D_-77uRNyKC9r%3DA%40mail.gmail.com

src/backend/postmaster/pgstat.c

index b4d690db96387aaeb3cf5b7c6d469024b18c1ae8..a121e7fdcd3c97d40c4da76d1483dfcd0a62df5f 100644 (file)
@@ -2650,7 +2650,7 @@ CreateSharedBackendStatus(void)
        }
 
        /* Create or attach to the shared appname buffer */
-       size = mul_size(NAMEDATALEN, MaxBackends);
+       size = mul_size(NAMEDATALEN, NumBackendStatSlots);
        BackendAppnameBuffer = (char *)
                ShmemInitStruct("Backend Application Name Buffer", size, &found);
 
@@ -2668,7 +2668,7 @@ CreateSharedBackendStatus(void)
        }
 
        /* Create or attach to the shared client hostname buffer */
-       size = mul_size(NAMEDATALEN, MaxBackends);
+       size = mul_size(NAMEDATALEN, NumBackendStatSlots);
        BackendClientHostnameBuffer = (char *)
                ShmemInitStruct("Backend Client Host Name Buffer", size, &found);