Fix SHMEM_ATTACH_UNKNOWN_SIZE when the shmem area doesn't exist SHMEM_ATTACH_UNKNOWN_SIZE can be passed as argument to ShmemRequestStruct() when the caller wants to attach to an existing shared memory structure whose size it doesn't know. If the shared memory structure doesn't exist, the request should fail, but instead, ProcessShmemRequestsAfterStartup() tried to create the structure with size = -1. That led to integer overflow in ShmemAllocRaw() and memory corruption.
Fix by rejecting requests with SHMEM_ATTACH_UNKNOWN_SIZE when the structure doesn't exist. Also add an integer overflow check in ShmemAllocRaw(), to protect from this kind of confusion or simply too large requests. Also document SHMEM_ATTACH_UNKNOWN_SIZE. Author: Ashutosh Bapat <[email protected]> Discussion: https://www.postgresql.org/message-id/caexhw5u_ftsoas85kg981vu6er1gv-344rup6zyew7xmjed...@mail.gmail.com Backpatch-through: 19 Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/311df1dc0392f06973cf98eac51d63cb007267ce Modified Files -------------- doc/src/sgml/xfunc.sgml | 10 ++++++++++ src/backend/storage/ipc/shmem.c | 22 ++++++++++++++++++++-- .../modules/test_shmem/t/001_late_shmem_alloc.pl | 17 +++++++++++++++++ src/test/modules/test_shmem/test_shmem.c | 11 +++++++---- 4 files changed, 54 insertions(+), 6 deletions(-)
