mirror of
https://github.com/postgres/postgres.git
synced 2026-10-23 13:29:09 +03:00
Fix crash when reading stats file at startup with fixed-sized kinds
pgstat_read_statsfile() has never checked that the kind of a hash entry is variable-sized. Since44539786b8, that has begun tracking which hash table a kind ID should use, it is possible to finish with a NULL pointer dereference for a PGSTAT_FILE_ENTRY_HASH. Fixed-sized stats kinds have no hash table and no DSA area, hence their dsa references in pgStatLocal.kind_hash[] are NULL. This case can occur when reading statistics files if the same kind ID is reused across server restarts, with shared_preload_libraries loading different stats kind information each time: stats written with a set of PGSTAT_FILE_ENTRY_HASH, then read back with the same kind ID pointing to a custom fixed-sized kind info. Oversight in44539786b8. Reported-by: Zsolt Parragi <zsolt.parragi@percona.com> Author: Sami Imseih <samimseih.pg@gmail.com> Author: Zsolt Parragi <zsolt.parragi@percona.com> Discussion: https://postgr.es/m/CAN4CZFMxuOOuYV14+i3YcPG-16q02eBtSVa82J111=ZnDwSicA@mail.gmail.com
This commit is contained in:
@@ -2048,6 +2048,14 @@ pgstat_read_statsfile(void)
|
||||
key.objid, t);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (kind_info->fixed_amount)
|
||||
{
|
||||
elog(WARNING, "invalid fixed_amount in stats kind for entry %u/%u/%" PRIu64 " of type %c",
|
||||
key.kind, key.dboid,
|
||||
key.objid, t);
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user