Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wxNys-002gRN-1I for pgsql-bugs@arkaria.postgresql.org; Fri, 21 Aug 2026 12:04:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wxNyq-00DAWr-0T for pgsql-bugs@arkaria.postgresql.org; Fri, 21 Aug 2026 12:04:16 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wxNyp-00DAWj-2U for pgsql-bugs@lists.postgresql.org; Fri, 21 Aug 2026 12:04:15 +0000 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wxNyo-00000001jkS-0dKt for pgsql-bugs@lists.postgresql.org; Fri, 21 Aug 2026 12:04:14 +0000 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-4955aa106b1so8685825e9.0 for ; Fri, 21 Aug 2026 05:04:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787313851; x=1787918651; darn=lists.postgresql.org; h=in-reply-to:from:cc:content-language:references:to:subject :user-agent:mime-version:date:message-id:content-type:from:to:cc :subject:date:message-id:reply-to:content-type; bh=OrkUgz+8B5f8Jdxjj7JX33TpAgZ3lrEavxVvVfPizr8=; b=IN9OFxBq/du9+QNf+21YR1DevWIzZLT/eXhdGVp51+pFrpl5g3BToouMBeiVY8rrll LFuMJOGnp5Tl/BWhMhesZd9um4A6IW0OevhShFcfhawz7UzmZhyeEQbTrhQBJAskoqpP 3oavHH1/xVTDiMZM3VtW35jjP8uuDZECAxgas+XElSTgNQASy+M7V5x8nsgFDsU2auCi KvU7+QfcEnAVgDIhrPcoGkTERsLHHz3MSUIFp0oK5A9rf5RQyYUJyNssUj8sNsTdldEo SlQPziS4xUrLrE0FD9a+iyXRNH8HOyCyNzL0Oetx20zR1O/10Lp6nE7JvlM2sGhjgNZh vpdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787313851; x=1787918651; h=in-reply-to:from:cc:content-language:references:to:subject :user-agent:mime-version:date:message-id:content-type:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=OrkUgz+8B5f8Jdxjj7JX33TpAgZ3lrEavxVvVfPizr8=; b=KjhMHUJdRwVKnxCvKbg0PIGlghZsL9aru5Sq2BorsmjGUsN+UizM4JbsjLDaVcaLG2 k+6TKTe5xYTGWW8t10mGO4iBsG+BrEC9YtcCeH4q7f1h1VX0G0fi9xeqOvscDjjeqN4J Q7jHfxEWy8U6iEqG4cQF8yETSIKEp+JBnzuSMM5UP3owpCL5nSwFGWjonAT6b6nakFwM waVMxbVk3kNAU0dDL+nbd7Vf4C3BV6aDgfv85Z9scu5fKHF1sTSOsQLLwf5DxZtOpjCE jr7XQXsdUry5FKypT89nXZrJGYGjt61HOzsvKSvC8n2LpMgoV0U8q6mrU1yBpSaC7O3v S4vg== X-Gm-Message-State: AOJu0YxjbHPcQsT0I6TQWDQ5A83WsB0wUk/tomkDeGRi0Zq2P6g7zmId wQrGwdZAJisnPsDxk+byXu+4T9AVLDgTohfw/gr5m1ZibOmoozbVChqRBNn0KA== X-Gm-Gg: AR+sD12JwdiEJY2DnHD0en9t+IcaK+wKXVsnHbtayS42g8T4RQQ0zv9KkwyybzoqxqY qEvQDV/4UzfmG5GovLCbbc204GVSBM4o36vbDPntUZk7jq3Qp3o9yrRDRX++YynG0L5y39uPbQl Bv+hHPsIhAyXg5lhb9nrflW4S6dqdFJ7IPQtodGjbNIgtFkIwu/hlH56hyrZc5DqiGAgDA3fP2n 7iDogsCgqCOSPoKe7lShOIRwumCEr9qPamyPrRNMRCKvih1TNFBoPhRX4FKWABQsSoFrJ0up8hG s4U9Qfks82ocvu9MHJQ1bhasZ/7g9JOV5ur23DzHYcNGN/nTmAyOdli+cdcnMUCW3fVNHJTQuAT Guha5pTqv9qsr/MSd5UlS0/5ZKT99UlY5W1/kYatN4/X6Q+dsEYeiTyw2eWN2u6r3G4l2+o8Ljz /YcQfZw80t6/4nYrc9FnHOv6ciJOhwthH/pR3Pxj10+CjcfqJSC7oR61C7jVWm9/kUPPUBXYllQ 7OBgxx9jPlJWdYlElkw+otul090ESOFQtDKCh5LEg== X-Received: by 2002:a05:600c:8b8c:b0:499:484a:98e7 with SMTP id 5b1f17b1804b1-499b845c9d9mr94557075e9.14.1787313850563; Fri, 21 Aug 2026 05:04:10 -0700 (PDT) Received: from ?IPV6:2a01:e0a:bf8:b480:e9e7:a526:c623:a7eb? ([2a01:e0a:bf8:b480:e9e7:a526:c623:a7eb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-499bae8bb6fsm17610495e9.0.2026.08.21.05.04.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 21 Aug 2026 05:04:09 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------dVx4irQEQ82jua7UtyHmtugk" Message-ID: <19d59133-7a9b-4d9f-a439-201d143bdb5f@gmail.com> Date: Fri, 21 Aug 2026 14:04:09 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: BUG #19634: Hash partition with large MODULUS causes "invalid memory alloc request size" To: pgsql-bugs@lists.postgresql.org References: <19634-c18dfa96a8edc306@postgresql.org> Content-Language: en-US Cc: hackerzheng666@gmail.com From: Pierre Forstmann In-Reply-To: <19634-c18dfa96a8edc306@postgresql.org> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------dVx4irQEQ82jua7UtyHmtugk Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hello, I propose following patch that adds the check to new_partition_bound routine: postgres=# CREATE TABLE t (id int) PARTITION BY HASH (id); CREATE TABLE postgres=# CREATE TABLE t_p0 PARTITION OF t FOR VALUES WITH (MODULUS 268435457, REMAINDER 0); ERROR:  hash partitions bounds are too large DETAIL:  Creating hash partitions for modulus 268435457 would require too much memory. HINT:  Reduce the number of partitions. postgres=# Regards, Pierre Forstmann Le 21/08/2026 à 05:44, PG Bug reporting form a écrit : > 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 > > > > --------------dVx4irQEQ82jua7UtyHmtugk Content-Type: text/x-patch; charset=UTF-8; name="0001-v1-0001-Fix-memory-allocation-check.patch" Content-Disposition: attachment; filename="0001-v1-0001-Fix-memory-allocation-check.patch" Content-Transfer-Encoding: base64 RnJvbSA3Y2E4MGYzM2I4MDZlMmIzMjJlOTYzMWUwMTA0NjE3M2IyNzZlODdlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQaWVycmUgRm9yc3RtYW5uIDxwaWVycmUuZm9yc3Rt YW5uQGdtYWlsLmNvbT4KRGF0ZTogRnJpLCAyMSBBdWcgMjAyNiAxMzo1NjoyOSArMDIwMApT dWJqZWN0OiBbUEFUQ0hdIHYxLTAwMDEtRml4LW1lbW9yeS1hbGxvY2F0aW9uLWNoZWNrCgot LS0KIHNyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0Ym91bmRzLmMgfCAxMCArKysrKysr KysrCiAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0Ym91bmRzLmMgYi9zcmMvYmFja2VuZC9wYXJ0 aXRpb25pbmcvcGFydGJvdW5kcy5jCmluZGV4IDg2NWE5MmM4NTYxLi4xNWFiMGY3MTVkNCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRib3VuZHMuYworKysg Yi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydGJvdW5kcy5jCkBAIC0yOTE4LDYgKzI5 MTgsMTQgQEAgY2hlY2tfbmV3X3BhcnRpdGlvbl9ib3VuZChjaGFyICpyZWxuYW1lLCBSZWxh dGlvbiBwYXJlbnQsCiAJCQkJQXNzZXJ0KHNwZWMtPnN0cmF0ZWd5ID09IFBBUlRJVElPTl9T VFJBVEVHWV9IQVNIKTsKIAkJCQlBc3NlcnQoc3BlYy0+cmVtYWluZGVyID49IDAgJiYgc3Bl Yy0+cmVtYWluZGVyIDwgc3BlYy0+bW9kdWx1cyk7CiAKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogQ2hlY2sgbmVlZGVkIG1lbW9yeSB0aGF0IHdpbGwgYmUgYWxsb2Nh dGVkIGluIGNyZWF0ZV9oYXNoX2JvdW5kcygpICovCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChzcGVjLT5tb2R1bHVzICogc2l6ZW9mKGludCkgPiBNYXhBbGxvY1Np emUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJlcG9ydChF UlJPUiwgKGVycmNvZGUoRVJSQ09ERV9QUk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJtc2coImhh c2ggcGFydGl0aW9ucyBib3VuZHMgYXJlIHRvbyBsYXJnZSIpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycmRldGFpbCgiQ3JlYXRpbmcg aGFzaCBwYXJ0aXRpb25zIGZvciBtb2R1bHVzICVkIHdvdWxkIHJlcXVpcmUgdG9vIG11Y2gg bWVtb3J5LiIsIHNwZWMtPm1vZHVsdXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVycmhpbnQoIlJlZHVjZSB0aGUgbnVtYmVyIG9mIHBh cnRpdGlvbnMuIikpKSk7CisKKwogCQkJCWlmIChwYXJ0ZGVzYy0+bnBhcnRzID4gMCkKIAkJ CQl7CiAJCQkJCWludAkJCWdyZWF0ZXN0X21vZHVsdXM7CkBAIC0zMDMwLDggKzMwMzgsMTAg QEAgY2hlY2tfbmV3X3BhcnRpdGlvbl9ib3VuZChjaGFyICpyZWxuYW1lLCBSZWxhdGlvbiBw YXJlbnQsCiAJCQkJCQl9CiAJCQkJCQlyZW1haW5kZXIgKz0gc3BlYy0+bW9kdWx1czsKIAkJ CQkJfSB3aGlsZSAocmVtYWluZGVyIDwgZ3JlYXRlc3RfbW9kdWx1cyk7CisKIAkJCQl9CiAK KwogCQkJCWJyZWFrOwogCQkJfQogCi0tIAoyLjQ3LjMKCg== --------------dVx4irQEQ82jua7UtyHmtugk--