pgsql: Prevent integer overflows in array subscripting calculations.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Prevent integer overflows in array subscripting calculations.
Date: 2021-05-10 14:45:04
Message-ID: E1lg79c-0004Te-6H@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Prevent integer overflows in array subscripting calculations.

While we were (mostly) careful about ensuring that the dimensions of
arrays aren't large enough to cause integer overflow, the lower bound
values were generally not checked. This allows situations where
lower_bound + dimension overflows an integer. It seems that that's
harmless so far as array reading is concerned, except that array
elements with subscripts notionally exceeding INT_MAX are inaccessible.
However, it confuses various array-assignment logic, resulting in a
potential for memory stomps.

Fix by adding checks that array lower bounds aren't large enough to
cause lower_bound + dimension to overflow. (Note: this results in
disallowing cases where the last subscript position would be exactly
INT_MAX. In principle we could probably allow that, but there's a lot
of code that computes lower_bound + dimension and would need adjustment.
It seems doubtful that it's worth the trouble/risk to allow it.)

Somewhat independently of that, array_set_element() was careless
about possible overflow when checking the subscript of a fixed-length
array, creating a different route to memory stomps. Fix that too.

Security: CVE-2021-32027

Branch
------
REL9_6_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/0c1caa48d3ccb7a5d1343b53aa32fcae45dc2d00

Modified Files
--------------
src/backend/executor/execQual.c | 4 ++++
src/backend/utils/adt/array_userfuncs.c | 1 +
src/backend/utils/adt/arrayfuncs.c | 40 ++++++++++++++++++++-------------
src/backend/utils/adt/arrayutils.c | 27 ++++++++++++++++++++++
src/include/utils/array.h | 1 +
5 files changed, 57 insertions(+), 16 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2021-05-10 15:03:03 pgsql: Fix mishandling of resjunk columns in ON CONFLICT ... UPDATE tli
Previous Message Bruce Momjian 2021-05-10 13:57:42 Re: pgsql: doc: first draft of the PG 14 release notes