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 A40F2C83038 for ; Wed, 2 Jul 2025 01:09:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 19F596B00C0; Tue, 1 Jul 2025 21:09:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 151F06B00C3; Tue, 1 Jul 2025 21:09:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0657E6B00C4; Tue, 1 Jul 2025 21:09:03 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id E1B9A6B00C0 for ; Tue, 1 Jul 2025 21:09:03 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 171271A064F for ; Wed, 2 Jul 2025 01:09:03 +0000 (UTC) X-FDA: 83617540566.30.AAC18BA Received: from out30-99.freemail.mail.aliyun.com (out30-99.freemail.mail.aliyun.com [115.124.30.99]) by imf11.hostedemail.com (Postfix) with ESMTP id 0856940005 for ; Wed, 2 Jul 2025 01:08:59 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=li2mLjGm; spf=pass (imf11.hostedemail.com: domain of fengwei_yin@linux.alibaba.com designates 115.124.30.99 as permitted sender) smtp.mailfrom=fengwei_yin@linux.alibaba.com; dmarc=pass (policy=none) header.from=linux.alibaba.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751418541; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ftBlfmSXkRjfyEF0gwKGfmT/6LZAIbCEpr1ozhDrc1k=; b=icUujS5mVnftK3eEcZX2SiUkcQaCT2kPMxwLCAH4SmR7kJs5n6U3a6wwDtTxyrTRTC8p1E czAvjLAugjvbtGl5NSSqYb1BLw9ZVWv0aru90nLxbQEFz2jKC88BluKbNoCUtwVM+GYXyt BZBvC5wzY+zLQ6ILVL7g61bMcVvT4Es= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=linux.alibaba.com header.s=default header.b=li2mLjGm; spf=pass (imf11.hostedemail.com: domain of fengwei_yin@linux.alibaba.com designates 115.124.30.99 as permitted sender) smtp.mailfrom=fengwei_yin@linux.alibaba.com; dmarc=pass (policy=none) header.from=linux.alibaba.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751418541; a=rsa-sha256; cv=none; b=RWK+yG9B19qk6VuGAAyQOv2Tk1SL16jtt9WmIcSdb7OBCzwLkyvqxdGoSgLsognxkoJkhF f+P3jcHPWNenyVEzNC9as++H7Jn73GL+G0I8WAQxY04uIAtDAaGP+RK9Z10XxGeW1S8yF1 z40XhVmaNL+3gLYAPOLiPF23u3TsliE= DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1751418536; h=Date:From:To:Subject:Message-ID:MIME-Version:Content-Type; bh=ftBlfmSXkRjfyEF0gwKGfmT/6LZAIbCEpr1ozhDrc1k=; b=li2mLjGmOeXDXK3ErucEA72GLY8xnFMs7iSVh4yjLqd7NCbv/U+BFH1VZdFzgbsURvA0kp7U2AKjSgzrtd4KsP8Viy4R3nBva8qM2zRGiTV7aBTWh4Wst73po4QsX5tTJKT3wwDabWiaA7eINFvQbOlbLPXwEvel5Q81DWSXtLQ= Received: from U-V2QX163P-2032.local(mailfrom:fengwei_yin@linux.alibaba.com fp:SMTPD_---0WgVsmul_1751418535 cluster:ay36) by smtp.aliyun-inc.com; Wed, 02 Jul 2025 09:08:55 +0800 Date: Wed, 2 Jul 2025 09:08:54 +0800 From: YinFengwei To: Kees Cook Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, zhourundong.zrd@linux.alibaba.com Subject: Re: [Question] About the elf program header size Message-ID: References: <202506270854.A729825@keescook> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <202506270854.A729825@keescook> X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 0856940005 X-Stat-Signature: 7orgir45nhhb1bue13676uepki9tny14 X-HE-Tag: 1751418539-301592 X-HE-Meta: U2FsdGVkX18YaRy1E06+xfxsdI/Ui8QWLkCE+YcqQIAX63Yiwa4ULAP+4KmOQVV0VYk60PkWzQ6QAbf2tqjrPEUfvSMrmeFIaXk1vAj+eAiHUzxbcgfpEGxXOSIkNFBOxtsaoBc9gzZlGnqAsJ/HdwH4swKK9n8Jog9lV5ixZ/jmGMRRWSBbGf3bofGF0q9zIKJ78QDCb7U29ZV0I06DTcYe4SKfCgw8wGSLR9ajaY457+Tx16fPlOeb0OI8+x8lQS32gIb76OeQPq+UAg6omP/mrx3gantb+v3d8DCqBKjqjKkZ4rQ31uFXNmYczXBBmFY8CnI2uMjp7V1XB8azR+Q03QVwgUuHwb5e8SgVmv0hRqeYzswU1s9+pTAYxzu+HlPguKxTkweBwH13Ww/mlU+GqjpXj1mslDGuwWZn+8lhs/Mo4iG1DUBoDgi3N3ZoEMZz7WheSP5II+d3wDsMYCx4J/aqnrR6XK8YR4mGajcboAKOD8kOvzYfaRvna3AYhYUBj/+Rfthi5ypmTzQQ2puyAuo3Kl/nRSQAf3ZXmIBgqEAs3jafyHNNGSrgaLYW5JPX6MrW47BuyWpjFcWAvPAQTkKUDBpk8qvcbLXhLM+rQ95/aOvN/s9LhCAFqraTjh/dz18w43esenBZXkglTyatCkr7C6V4NvWHDaczfifKd1TJmkaYB4/dnRFXoQrcWZQSzHvOyz81npfIg9AhUdYU3I2ew8w22I7nJ1CHiBWrLOaQVhboqvfgL3BZi3PSeJCNhrbnU2FUrFM9H4/MM2kP6Tv+RClEDQm/FZoOHpGwERtLeYCsDu7LC0R2OVfHbk4D3HyoLnon0kaKDtNIbyLoIS9ICaq2w8Y7nY01ZgW7/sMqdz43VxRAGg/ZaG68Yc8vO38uHfggcy8vksZ5IzNACEPLnIelq5LTn2P8pS1k0iYkakjIs6TWXJX0N7pFjlQKL4Sli+wHN3DD943 N0vOXyPW +RSNr+KE+zyyBI74B6KnmB2okzfnpUbwXG5U2rRxBkkJcvDravnl5dR4gilIC5tLXgP9Rih29Rz1/Z9MNC4tS884ysXHNJOgMCH1W/UqcDLF1eSuPQ1WtOBJDFlIp6/ceSnhVi7Ob1CzVydRdCgxanBSt75euigt9q1EbY5/XifIRg+l+wZIT0Gc8CJBMKbAphf4acD5jAvxR65mlGv5CHMSREaOSP/0QsRKwimKnjYp9GjnWExJuJE4CdTmyWuVERyPvwOWYm4XYpqo2GlzoxHSqg2u9FLjlodzgtymkTaqIkK9q/VRkG68p6lMvg2ZE6tUR1ArI/c5uBe+uP2iCajeLdw== 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: On Fri, Jun 27, 2025 at 09:35:45AM +0800, Kees Cook wrote: > On Fri, Jun 27, 2025 at 09:04:11AM +0800, YinFengwei wrote: > > We had a script generated assembly code. built it with gcc and the > > output elf file had 78 program headers. > > Why so many? > > > On an arm64 platform, if we have 64KB base page size, the elf can > > be started correctly. But if we have 4KB base page size, the elf > > can NOT be started with: > > cannot execute binary file: Exec format error > > > > Look at the function load_elf_phdrs(): > > if (size == 0 || size > 65536 || size > ELF_MIN_ALIGN) > > goto out; > > > > ELF_MIN_ALIGN is defined as PAGE_SIZE on arm64. Which can explain > > above inconsistent behaviors (from user perspetive). > > > > I didn't find the limitation definition in ELF spec(Maybe I missed > > some obvious info there). If I remove "size > ELF_MIN_ALIGN", the > > same elf can be started correctly even with 4KB page size. > > > > So my question is why we limit the who program headers total size > > to PAGE_SIZE? git history couldn't tell anything because the > > limitation was introduced when whole linux kernel tree was migrated > > to git. Is there a possible constrain on other architecture? Thanks. > > Looking through > https://git.kernel.org/pub/scm/linux/kernel/git/history/history.git > (which doesn't have linked history, so you have to examine explicit "pre > git" tags), I see: > > 4779b38bcb96 ("[PATCH] Linux-0.99.13 (September 19, 1993)") > Which says "ELF binary support it a notable change." Here, the PAGE_SIZE > check does not exist. When ELF interp support was added in > 9e11983a5a3e ("Import 0.99.15f"), we see the check appear, and I can > find no rationale. > > And with 6a8d38945cf4 ("binfmt_elf: Hoist ELF program header loading to > a function"), the PAGE_SIZE check is _added_ for non-interp loads. > > It seems the 64K count limit is sufficient? (If the goal was to avoid > large memory allocations happening from userspace, we're way past > PAGE_SIZE these days between IPC, BPF, etc.) Does this work for you? > > > diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c > index a43363d593e5..92de44b8765f 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); Just want to check: are you going to push this change to be merged? Thanks. Regards Yin, Fengwei > > > -- > Kees Cook