pgsql: Skip dead backends in MinimumActiveBackends

Поиск
Список
Период
Сортировка
От Stephen Frost
Тема pgsql: Skip dead backends in MinimumActiveBackends
Дата
Msg-id E1YAhvP-0006MK-BD@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Skip dead backends in MinimumActiveBackends

Back in ed0b409, PGPROC was split and moved to static variables in
procarray.c, with procs in ProcArrayStruct replaced by an array of
integers representing process numbers (pgprocnos), with -1 indicating a
dead process which has yet to be removed.  Access to procArray is
generally done under ProcArrayLock and therefore most code does not have
to concern itself with -1 entries.

However, MinimumActiveBackends intentionally does not take
ProcArrayLock, which means it has to be extra careful when accessing
procArray.  Prior to ed0b409, this was handled by checking for a NULL
in the pointer array, but that check was no longer valid after the
split.  Coverity pointed out that the check could never happen and so
it was removed in 5592eba.  That didn't make anything worse, but it
didn't fix the issue either.

The correct fix is to check for pgprocno == -1 and skip over that entry
if it is encountered.

Back-patch to 9.2, since there can be attempts to access the arrays
prior to their start otherwise.  Note that the changes prior to 9.4 will
look a bit different due to the change in 5592eba.

Note that MinimumActiveBackends only returns a bool for heuristic
purposes and any pre-array accesses are strictly read-only and so there
is no security implication and the lack of fields complaints indicates
it's very unlikely to run into issues due to this.

Pointed out by Noah.

Branch
------
REL9_3_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/e71111972d7e914b84bf79ea346b438d7d815108

Modified Files
--------------
src/backend/storage/ipc/procarray.c |    5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Stephen Frost
Дата:
Сообщение: pgsql: Skip dead backends in MinimumActiveBackends
Следующее
От: Stephen Frost
Дата:
Сообщение: pgsql: Skip dead backends in MinimumActiveBackends