pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Andres Freund <andres@anarazel.de>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: read_stream: Fix overflow hazard with large shared buffers
Date: Mon, 07 Apr 2025 13:45:25 +0000
Message-ID: <E1u1mmz-003818-0G@gemulon.postgresql.org> (raw)

read_stream: Fix overflow hazard with large shared buffers

If the limit returned by GetAdditionalPinLimit() is large, the buffer_limit
variable in read_stream_start_pending_read() can overflow. While the code is
careful to limit buffer_limit PG_INT16_MAX, we subsequently add the number of
forwarded buffers.

The overflow can lead to assertion failures, crashes or wrong query results
when using large shared buffers.

It seems easier to avoid this if we make the buffer_limit variable an int,
instead of an int16.  Do so, and clamp buffer_limit after adding the number of
forwarded buffers.

It's possible we might want to address this and related issues more widely by
changing to int instead of int16 more widely, but since the consequences of
this bug can be confusing, it seems better to fix it now.

This bug was introduced in ed0b87caaca.

Discussion: https://postgr.es/m/ewvz3cbtlhrwqk7h6ca6cctiqh7r64ol3pzb3iyjycn2r5nxk5@tnhw3a5zatlr

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/8ce79483dc47df11159f506cf51bacec9f874055

Modified Files
--------------
src/backend/storage/aio/read_stream.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)



Message-ID: <E1u1mmz-003818-0G@gemulon.postgresql.org>
Permalink:  ../E1u1mmz-003818-0G@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1u1mmz-003818-0G@gemulon.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: andres@anarazel.de, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: read_stream: Fix overflow hazard with large shared buffers
  In-Reply-To: <E1u1mmz-003818-0G@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox