BUG #15312: Possible access to unintended variable in "postgres/src/backend/postmaster/pgstat.c" line 2698

The Post Office <noreply@postgresql.org>

From: PG Bug reporting form <noreply@postgresql.org>
To: pgsql-bugs@lists.postgresql.org
Cc: petrum@gmail.com
Date: 2018-08-07T10:52:10Z
Lists: pgsql-bugs
The following bug has been logged on the website:

Bug reference:      15312
Logged by:          Petru-Florin Mihancea
Email address:      petrum@gmail.com
PostgreSQL version: Unsupported/Unknown
Operating system:   Macosx
Description:        

While experimenting with a CodeSonar plugin we develop, we noticed a
potential bug in file "postgres/src/backend/postmaster/pgstat.c" line 2698
function CreateSharedBackendStatus.

/* Create or attach to the shared activity buffer */
BackendActivityBufferSize = mul_size(pgstat_track_activity_query_size,
									 NumBackendStatSlots);
BackendActivityBuffer = (char *)
	ShmemInitStruct("Backend Activity Buffer",
					BackendActivityBufferSize,
					&found);
if (!found)
{
	MemSet(BackendActivityBuffer, 0, size); //HERE

	/* Initialize st_activity pointers. */
	buffer = BackendActivityBuffer;
	for (i = 0; i < NumBackendStatSlots; i++)
	{
		BackendStatusArray[i].st_activity_raw = buffer;
		buffer += pgstat_track_activity_query_size;
	}
}

Shouldn't BackendActivityBufferSize be accessed in the marked line instead
of size? 

Thanks,
Petru Florin Mihancea

Commits

  1. Fix incorrect initialization of BackendActivityBuffer.

  2. Try to log current the query string when a backend crashes.