From patchwork Thu Aug 29 17:42:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrii Nakryiko X-Patchwork-Id: 13783517 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 A2717C8303E for ; Thu, 29 Aug 2024 17:43:02 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 100506B00B5; Thu, 29 Aug 2024 13:43:02 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 00F526B00B7; Thu, 29 Aug 2024 13:43:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D7D996B00B8; Thu, 29 Aug 2024 13:43:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id A926E6B00B5 for ; Thu, 29 Aug 2024 13:43:01 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 6490DA04B0 for ; Thu, 29 Aug 2024 17:43:01 +0000 (UTC) X-FDA: 82506003762.22.5E45B02 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by imf07.hostedemail.com (Postfix) with ESMTP id A4D8640009 for ; Thu, 29 Aug 2024 17:42:59 +0000 (UTC) Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Iij0aW8j; spf=pass (imf07.hostedemail.com: domain of andrii@kernel.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=andrii@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1724953309; 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:in-reply-to:references:references:dkim-signature; bh=7A7Lt1FSDUlLzoHLFtmVPVQLw9Jv32/MfGnKFXKkguI=; b=I+dO8IqqGbT4dpYmBvaJ5HOBsxg4ReACA6o7omOgHO3oqorQMKDxlneaHIEKtsX8i16hEK N/vzKCuCPhfuHEiHH9OxXWyXxySxMHxwqwrztc5Y8Qkwh5M2ZA4mUAWY71T1UoRDKl9cB1 /NIfCvNHo6R7NYaHrMX/92EPXuaJwCs= ARC-Authentication-Results: i=1; imf07.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=Iij0aW8j; spf=pass (imf07.hostedemail.com: domain of andrii@kernel.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=andrii@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1724953309; a=rsa-sha256; cv=none; b=s/5KF9UBxwBwsaYqG0VEO/dCCNaLDoz+f70Dhpc1pqNfGgFSStHlY3FJriWmEzDSjsyq4v jtfQrwSKQ1iAw2uBiY3xIHQET3/wGYu35TLn7m5qlzit0UJuGraQAyGm03M0TLq4UD9hHH nO1tD+pMasZ5ReP4nlgFejROHRAel+k= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by ams.source.kernel.org (Postfix) with ESMTP id C12C0AE287B; Thu, 29 Aug 2024 17:42:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8E162C4CEC1; Thu, 29 Aug 2024 17:42:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1724953377; bh=2jVZvSaSmUP1eILbkNsVbAsPQzYYbYwqDjRGc+xq+N4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Iij0aW8jjwJqgQiw3EdbzhJ/zMX2hOtDDDPvqLD6dR//5hE2vlBaFNc1Zns9oO8Of fbYp4hyEnZlujg6/CwOVGXypguIDPW8QB1Q8pOqX55ZuVvyzbejBkFqvg4eB//Bwkw Ql2O4bvlqmgE5bDgmeHYob++eJop6Sq5bENwENUgVel5WIDH2dogQ19O97M+HxhjZa 4lR64OjtEtn+0wJOpHHvZdIHAa24eN8rv8AVfdm0rqsm5ow3yZGLedfPASdB+8xa3X 02bHyiJawK+xM63XbjtQExRwHZOnHvqLT6SRaeE63Rl0/R7SRQXbCPWVUbF1nsrfu6 RLwIVPacoRcsg== From: Andrii Nakryiko To: bpf@vger.kernel.org Cc: linux-mm@kvack.org, akpm@linux-foundation.org, adobriyan@gmail.com, shakeel.butt@linux.dev, hannes@cmpxchg.org, ak@linux.intel.com, osandov@osandov.com, song@kernel.org, jannh@google.com, linux-fsdevel@vger.kernel.org, willy@infradead.org, Andrii Nakryiko , Eduard Zingerman Subject: [PATCH v7 bpf-next 07/10] lib/buildid: don't limit .note.gnu.build-id to the first page in ELF Date: Thu, 29 Aug 2024 10:42:29 -0700 Message-ID: <20240829174232.3133883-8-andrii@kernel.org> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20240829174232.3133883-1-andrii@kernel.org> References: <20240829174232.3133883-1-andrii@kernel.org> MIME-Version: 1.0 X-Stat-Signature: 1mhgf6mhdt3hhmdd4z5o87qctgumdj19 X-Rspam-User: X-Rspamd-Queue-Id: A4D8640009 X-Rspamd-Server: rspam02 X-HE-Tag: 1724953379-584797 X-HE-Meta: U2FsdGVkX1+5OsEQtozZv23QfVvTKc/oRryv69cW9kVWZQflVCxAjrL+x6noWwqjx7C8RN6gcxEHLVl+2w7DOXI3p1vNAIZqBdnUXVB2gO1Yxl+KFahXyw8MrvDkndTBxai9+eVtndzUrU0Jk/MKvJZd3gi/RjT4VRDiQ3LxIObtSzvpX32aHaD6qGGQLwHNlsaOUm5HRJSdFWy6cqg51KP9hjtNpu6POrLoUkPQS0ltfIT7e01qq3kpmP7mVwRabjz3v5EtffHFJLwiPju5VCDcsonEM7CdTfYD60923DOz+qY8r6Ar38AqbMsH87QkKud7Ympr3XeHDyT4P0k691B00CrM+A04NaoEC8n+Xp76/rAoptXkwtwjFTUGXdcem33UjtWQNxYYEYVs87mvIY5yX4LQYzCDnMIHZmvbPBwldlWgXoU23MLNRDdUABu7L2L+Lbba9ErW88gZak9xG1hysiGB7+oGsrkL4LMPIXaxqKWXS4/Oo63CNMmlwLjVNBOd8bXYg+4Cxtprmp/zrKqcm/JK2KVWwa4cT0v4/hQ1fVVZWf7PmGD0ALVdEsgl3RAORX1F6chPRxFV+H8ut85l/byR3yZlkc6ZppiVG+wu8P4xdJ/B5jvfKudR45t/SorwrLuLIEmh8En0V0dAd26rN5k1Tnhy4qZoywQacXWsDKjY9jDlPVABLEDmmbWx0LtLpo4TAS8oSRcR1IzehbN7sr1QoB57lxwDD6ZlTH+i6ca9ukm6eBvGWobdpQgxsnBMWNR48SFgnFSMU4tve6rW6ZNi1nFPIofWKpaBC52zLvN9KlvoG75rP9tnEEsgPOG1264uQPK4FS/ZNvu2JZobVnR8lTCrYvRt8MQCzQLDPP3wHKpyFteC+LqFWQxeyMkmEK2UpMJR8lyAbgkGy6ru7bHBrMzKsp6qJ3kZaTDtkDr3qdcu07whzZq+U+NC/luzyBjqtP7IeYvAvru UsZg0LGQ 3syAytgDcYmagXZzW3/iWVQgopcktTMpI758njzmSOePORj/cX/UTQ2NQQGLdN2mZYavOhUYXkuON2KUvc/kn8KIGiJusRBP06E05agpeOO1Av4GlWS3ED4NvmxcITHzKfjbLCYfWMBwxSdsGK1REdU4ot8xdenSIFcOQFZdp7Vvf+pfsUhOO6Kjz3D+Tj7Q91va/inlpubB10LPg9uMz7WrSZocXIbSQOg7qHw5I/13PSmX4o5vC6NoXIFAflrheNjES 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: With freader we don't need to restrict ourselves to a single page, so let's allow ELF notes to be at any valid position with the file. We also merge parse_build_id() and parse_build_id_buf() as now the only difference between them is note offset overflow, which makes sense to check in all situations. Reviewed-by: Eduard Zingerman Signed-off-by: Andrii Nakryiko --- lib/buildid.c | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/lib/buildid.c b/lib/buildid.c index 18ef55812c64..290641d92ac1 100644 --- a/lib/buildid.c +++ b/lib/buildid.c @@ -155,9 +155,8 @@ static void freader_cleanup(struct freader *r) * 32-bit and 64-bit system, because Elf32_Nhdr and Elf64_Nhdr are * identical. */ -static int parse_build_id_buf(struct freader *r, - unsigned char *build_id, __u32 *size, - loff_t note_off, Elf32_Word note_size) +static int parse_build_id(struct freader *r, unsigned char *build_id, __u32 *size, + loff_t note_off, Elf32_Word note_size) { const char note_name[] = "GNU"; const size_t note_name_sz = sizeof(note_name); @@ -165,7 +164,9 @@ static int parse_build_id_buf(struct freader *r, const Elf32_Nhdr *nhdr; const char *data; - note_end = note_off + note_size; + if (check_add_overflow(note_off, note_size, ¬e_end)) + return -EINVAL; + while (note_end - note_off > sizeof(Elf32_Nhdr) + note_name_sz) { nhdr = freader_fetch(r, note_off, sizeof(Elf32_Nhdr) + note_name_sz); if (!nhdr) @@ -204,23 +205,6 @@ static int parse_build_id_buf(struct freader *r, return -EINVAL; } -static inline int parse_build_id(struct freader *r, - unsigned char *build_id, - __u32 *size, - loff_t note_start_off, - Elf32_Word note_size) -{ - /* check for overflow */ - if (note_start_off + note_size < note_start_off) - return -EINVAL; - - /* only supports note that fits in the first page */ - if (note_start_off + note_size > PAGE_SIZE) - return -EINVAL; - - return parse_build_id_buf(r, build_id, size, note_start_off, note_size); -} - /* Parse build ID from 32-bit ELF */ static int get_build_id_32(struct freader *r, unsigned char *build_id, __u32 *size) {