agora inbox for pgsql-bugs@postgresql.org
help / color / mirror / Atom feedFrom: PG Bug reporting form <noreply@postgresql.org>
To: pgsql-bugs@lists.postgresql.org
Cc: hackerzheng666@gmail.com
Subject: BUG #19634: Hash partition with large MODULUS causes "invalid memory alloc request size"
Date: Fri, 21 Aug 2026 03:44:42 +0000
Message-ID: <19634-c18dfa96a8edc306@postgresql.org> (raw)
The following bug has been logged on the website:
Bug reference: 19634
Logged by: Zheng Hacker
Email address: hackerzheng666@gmail.com
PostgreSQL version: 19beta3
Operating system: Linux x86_64
Description:
Creating a hash partition with MODULUS >= 268435457 causes an internal error
"invalid memory alloc request size" on any subsequent query against the
partitioned table. The table becomes permanently unusable — SELECT,
INSERT,
and all other operations fail with the same error. Only DROP TABLE works.
Minimal reproducer (tested on PG 20devel commit 609f969, 2026-08-21):
CREATE TABLE t (id int) PARTITION BY HASH (id);
CREATE TABLE t_p0 PARTITION OF t FOR VALUES WITH (MODULUS 268435457,
REMAINDER 0);
SELECT * FROM t; -- ERROR: invalid memory alloc request size 1073741828
Root cause:
In src/backend/partitioning/partbounds.c, create_hash_bounds() (line 390)
allocates an array indexed by greatest_modulus:
boundinfo->nindexes = greatest_modulus;
boundinfo->indexes = palloc_array(int, greatest_modulus);
When greatest_modulus >= 268435457, this requests 268435457 * 4 =
1073741828
bytes, exceeding MaxAllocSize (1073741823 = 1GB - 1). No bounds check
exists
on the modulus value before this allocation.
The validation in check_new_partition_bound() (line ~2927) runs AFTER
create_hash_bounds() is called during partition descriptor loading, so it
never gets a chance to reject the invalid modulus.
Impact:
- Affects all versions since hash partitioning was introduced (PG 11+)
- The partition is created successfully (CREATE TABLE succeeds)
- But any access to the parent table fails permanently
- Only DROP TABLE recovers the table
- Any unprivileged user with CREATE TABLE permission can trigger this
Suggested fix:
Add a bounds check in create_hash_bounds() before the allocation, or
validate modulus against MaxAllocSize in check_new_partition_bound()
before partition descriptor loading.
PostgreSQL version: 20devel (commit 609f969)
OS: Ubuntu 22.04 x86_64
view thread (3+ messages) latest in thread
Message-ID: <19634-c18dfa96a8edc306@postgresql.org>
Permalink: ../19634-c18dfa96a8edc306@postgresql.org/
Also on: postgresql.org/message-id/19634-c18dfa96a8edc306@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-bugs@postgresql.org
Cc: noreply@postgresql.org, pgsql-bugs@lists.postgresql.org, hackerzheng666@gmail.com
Subject: Re: BUG #19634: Hash partition with large MODULUS causes "invalid memory alloc request size"
In-Reply-To: <19634-c18dfa96a8edc306@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 agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox