From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id BF478C83F1A for ; Thu, 17 Jul 2025 11:01:20 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 613878D0003; Thu, 17 Jul 2025 07:01:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5EAFF8D0001; Thu, 17 Jul 2025 07:01:20 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 500828D0003; Thu, 17 Jul 2025 07:01:20 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 3FDEE8D0001 for ; Thu, 17 Jul 2025 07:01:20 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 329181DAC2C for ; Thu, 17 Jul 2025 11:01:18 +0000 (UTC) X-FDA: 83673465036.05.FCF0FA3 Received: from out30-97.freemail.mail.aliyun.com (out30-97.freemail.mail.aliyun.com [115.124.30.97]) by imf26.hostedemail.com (Postfix) with ESMTP id DD85A140009 for ; Thu, 17 Jul 2025 11:01:14 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b="sgS4Qv/+"; dmarc=pass (policy=none) header.from=linux.alibaba.com; spf=pass (imf26.hostedemail.com: domain of fengwei_yin@linux.alibaba.com designates 115.124.30.97 as permitted sender) smtp.mailfrom=fengwei_yin@linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752750076; a=rsa-sha256; cv=none; b=tHh/OueEBtQGOav/eWfPCgGjVr64DnyAcJSGEyslJ37WC6UPmWeUthod2J7K+Zy9k9OFYG 86Xis0n0whyx89fw2mjrC3x520XxnLg8RnI++Cs/iHziuPimGzZqpcwSBH7wwiOaI6Kxdk eHqzZLzg0CdFZ0K+GRJYAC7jcEcWJkw= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b="sgS4Qv/+"; dmarc=pass (policy=none) header.from=linux.alibaba.com; spf=pass (imf26.hostedemail.com: domain of fengwei_yin@linux.alibaba.com designates 115.124.30.97 as permitted sender) smtp.mailfrom=fengwei_yin@linux.alibaba.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752750076; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=GtW0rdIfVmySTDjD9sh3sNcn546n42oEmIA+IY//UPk=; b=7aUWIIax665E+64/wZco5jLqREAEQElEA6EC3KJ14H4Y9Aml8/unQ+Sajplr8g3dUWTpqS sAibp6My8C6MOPnjYGteAwmLVpL3FHgMrAbzBxbbJq7aeAfiDFE+m9ckxtBP8CxOQ6a+T0 AQOJFG9xwMRCYccUVURSTWxsChtnkJY= DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1752750070; h=From:To:Subject:Date:Message-ID:MIME-Version; bh=GtW0rdIfVmySTDjD9sh3sNcn546n42oEmIA+IY//UPk=; b=sgS4Qv/+dfNLG2SLnfLkAn25EXATcTB7PT9MbNDVy1FQS0LPZ6YDado3eVsez+7/IFRP6tgZJCv3SzQ8NYAR8Y5pHN9GCL7mRCDxqCnwk1/Vq+Y9Wn2C3Z9x5YvOTETuKlBwmbeWBO1KfhBIqVM/7uzF6hGTmuNzOkDvd6AkAT8= Received: from localhost(mailfrom:fengwei_yin@linux.alibaba.com fp:SMTPD_---0Wj7tIj8_1752750068 cluster:ay36) by smtp.aliyun-inc.com; Thu, 17 Jul 2025 19:01:08 +0800 From: fengwei_yin@linux.alibaba.com To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: kees@kernel.org, fengwei_yin@linux.alibaba.com, zhourundong.zrd@linux.alibaba.com Subject: [PATCH] binfmt_elf: remove the 4k limitation of program header size Date: Thu, 17 Jul 2025 19:01:08 +0800 Message-ID: <20250717110108.55586-1-fengwei_yin@linux.alibaba.com> X-Mailer: git-send-email 2.49.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: DD85A140009 X-Stat-Signature: cegm5opmuktjno5799mc41ksog3q76d8 X-Rspam-User: X-HE-Tag: 1752750074-958618 X-HE-Meta: U2FsdGVkX1+1HbOkbn0BCy5gS04SQzuRsUJ//lEkPG7z5xCBkfEpus5l0COsqdFpNe4U9POtj6cYSZwojTR7IxMjvUqw6qqobDCwSX3S258am1jq5XMJjBB947VL9vHIyiV0FM5bkOgBIy9oGHkld03+ZkLMSbqLPtLJqN1CsPPYvZzxgtBxybJhGq4AT+3uRSELvXQOi8poVrznHCpzlditHMVfv2rJv3tGXBvDvUjYff0uvYVLiwu7ejScq5MIJN1aFZDLfISrUkIHhESVivysGaOMvIanCby8ngk89ArY7fPbHHqdzkzbH8EBJD7Wh/s/LyJksC3aA4WMVmveG/XhSoTO7borSbd/kCzcX0YeXnXVaso5kns3RuMomL/lj52vFIW+3tl0UJUKSjuCPWBUVTfvqlmtK9eP+3gxARQ84SmgcahIBDG9KHLIDNpAnB+o7/cM29SdEYsowF0Gygj5jwB7wSh9AVQSzi8SHoE4NCAOCnDqSVZsSwPRgIpr1q+E+bKIvHToXC7T3dEAXXSurngbD95T/ABaeWQNEvkRxvVZnIkiD5mN9uLEsOPvwuK8yi/7ZO463xBmiK7qRxj9CTCarMScm1znsUxoyEHyvGMfyFUuofHsuTJWySRIegoGZSj7wd0xOGgmtA14mtXbPVhWo37LvuOBmX7J5SNSYvwcUdo+VcD5LugmD0zu2YSG3VJ89sYy7QIHiseBtjLn0ISs5VxcLfEik4wRDXHICVXGPDJMOq2YBil3975nYY6nap+YNU5IancKbxJfhvBbKgtN8uqmobNMORzPk4f5MEw4GiJFhT4B+fz4T1xRpVm5QtN0rHWRmcNfZv2U8FAsN8/QAlY6agITzy5aTPU1nKF5SO4XTX2fdXQVDnG7ywpCg+XT7VZXs2j0WxISsxm0tjvQogfUERZspzLOldpl89Da163incqICKJBXbiawhBBN79GfINO/o0qNRh 8AIiRPcL H82cUNlW3h26T/GqGXRXsfGpyFad1Qp0vTLA3Y+TKDIDTsJ/mLmVrbdfa4XTQvkXgM2maC+syMRuafbMyYILfuiLknxsW5pSHryNM8B8MElJKmbc1KoaNL+HAaIxIZliMdT71jTgvPtLDBQtT4Zqp3o20McKvfXF4G1WwP6ql5xLRKw/HN4Fn5OmGZr8BKhxfeDPQ9zDgKc3YUHDaoSwHnXF5V9rdFnurK66jKqZuYHJ20BSkpmnKSzAsM+OTHC63oFnZlCaCcWxaC7x7hY8UxgQ0hU8Q+vC5gHV+ X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Yin Fengwei We have assembly code generated by a script. GCC successfully compiles it. However, the kernel cannot load it on an ARM64 platform with a 4K page size. In contrast, the same ELF file loads correctly on the same platform with a 64K page size. The root cause is the Linux kernel's ELF_MIN_ALIGN limitation on the program headers of ELF files. The ELF file contains 78 program headers (the script inserts many holes when generating the assembly code). On ARM64 with a 4K page size, the ELF_MIN_ALLIGN enforces a maximum of 74 program headers, causing the ELF file to fail. However, with a 64K page size, the ELF_MIN_ALIGN is relaxed to over 1,184 program headers, allowing the file to run correctly. Cook kindly identified that this limitation was introduced in Linux-0.99.15f without an explanation for its purpose [1]. The ELF specification does not impose such a restriction on program headers. Removing the ELF_MIN_ALIGN limitation on program headers to align with the ELF spec. After removing ELF_MIN_ALIGN limitation, 64K size limitation still exist which should be sufficient. [1] https://lore.kernel.org/linux-mm/202506270854.A729825@keescook/ Originally-by: Kees Cook Signed-off-by: Yin Fengwei --- Explaination about "Originally-by": it's debug code from Cook. And he didn't show the intention to submit it as patch. The change did fix the issue I hit... fs/binfmt_elf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index a43363d593e5..1cb35a2bc528 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -519,7 +519,7 @@ static struct elf_phdr *load_elf_phdrs(const struct elfhdr *elf_ex, /* Sanity check the number of program headers... */ /* ...and their total size. */ size = sizeof(struct elf_phdr) * elf_ex->e_phnum; - if (size == 0 || size > 65536 || size > ELF_MIN_ALIGN) + if (size == 0 || size > 65536) goto out; elf_phdata = kmalloc(size, GFP_KERNEL); -- 2.49.0