Re: SHMEM_ATTACH_iso-8859-1_SIZE reaches InitShmemIndexEntry() - Mailing list pgsql-hackers

From Heikki Linnakangas
Subject Re: SHMEM_ATTACH_iso-8859-1_SIZE reaches InitShmemIndexEntry()
Date
Msg-id b9b66874-49f5-4bac-9179-cca2cac64128@iki.fi
Whole thread
In response to SHMEM_ATTACH_iso-8859-1_SIZE reaches InitShmemIndexEntry()  (Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>)
List pgsql-hackers
On 18/09/2026 10:00, Ashutosh Bapat wrote:
> 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 does not know, after the
> startup. If the shared memory structure it wants to attach to does not
> exist, the request should fail. But instead
> ProcessShmemRequestsAfterStartup() ended up creating the structure
> with size = -1. InitShmemIndexEntry() did not catch it and created a
> ShmemIndexEntry with size = SIZE_MAX since size is an unsigned
> integer. ShmemAllocRaw() did not catch the overflow in address
> arithmetic and ended up allocating the new structure overlapping the
> earlier structure which can potentially cause memory corruption.
> 
> Attached patch fixes ProcessShmemRequestsAfterStartup() throw an error
> in this case, adds an Assert() in InitShmemIndexEntry() to make sure
> that a request with unknown size never reaches it,  makes
> ShmemAllocRaw() check for overflow, and documents use of
> SHMEM_ATTACH_UNKNOWN_SIZE.
> 
> I found this problem when working on resizable shared structures where
> the size of the structure may have changed from its initial size and
> hence may not be known. It's good to defend our shared memory
> structures from a bug in extension code.

Committed with minor cosmetic changes, thanks!

- Heikki




pgsql-hackers by date:

Previous
From: Etsuro Fujita
Date:
Subject: Re: [PG19][PATCH] Make postgres_fdw statistics import atomic
Next
From: Amit Langote
Date:
Subject: Re: PG19: two RI fast-path issues found while testing the batching revert