From patchwork Tue Jul 9 20:42:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrii Nakryiko X-Patchwork-Id: 13728509 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 63B85C2BD09 for ; Tue, 9 Jul 2024 20:43:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DFD0E6B009D; Tue, 9 Jul 2024 16:43:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DACB66B009E; Tue, 9 Jul 2024 16:43:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C262B6B009F; Tue, 9 Jul 2024 16:43:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id A0DF36B009D for ; Tue, 9 Jul 2024 16:43:08 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 1F40E413DF for ; Tue, 9 Jul 2024 20:43:08 +0000 (UTC) X-FDA: 82321388856.15.45695E2 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf09.hostedemail.com (Postfix) with ESMTP id 40F7114001F for ; Tue, 9 Jul 2024 20:43:06 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=WzRoCXxx; spf=pass (imf09.hostedemail.com: domain of andrii@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=andrii@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1720557755; 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=CxajWYdjrgD7wontsDXsiAtgcbkzL0TRv4p1vUoxG0o=; b=JZm0xcxB7LXb3OBbhPfRCLfry2NyjgJYjSbD7Ts/lBpHhZTXBtfRR626Ig2LeLiAnjROZ0 Uu7Orx+me1jhumTj7ejP5aCfCVyFgSYruqlL//NunkQjqoTBfCxg4OnAoUNlSSre124dMC 6YC4nbNxqlN1n2MtC+jh18rrw3gSLr8= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1720557755; a=rsa-sha256; cv=none; b=vewhFLyRHIj00c7wFKbfgflNf7e+9bIAZIqQUJnxUG4tJRz4bChNpw2lJQrT1/0CCA9WGd 94CNXnRpNgAP0hoDb/bnl4OHIT5kZBAD774l14ESjGgOjQ1uIv35EhKJQtLKR5p9AiXHHU 5qRn0l0U0tQNjL3jzXTycfp9DQX4Xn4= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=WzRoCXxx; spf=pass (imf09.hostedemail.com: domain of andrii@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=andrii@kernel.org; dmarc=pass (policy=none) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 781946166E; Tue, 9 Jul 2024 20:43:05 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0CF29C3277B; Tue, 9 Jul 2024 20:43:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1720557785; bh=O2hhW1KJHjeOM5cr1mZFJ2v06umN6X8sTn4Mje/nOWo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WzRoCXxxIgU97mgevxSLXRSjJt9eMODm+Xww5DbcnEGGQb32oZygpM+kn7rhk4036 WuHSWR525O8aBUt5+VMpo3Ni89DmSrXi6fKqVw7uh0w6q7fp3VlwcDIF1mB+UX5UeW 0bdX/feM9uiT/gwRPw58Qb7ZWDQ7pRNzMnPN5BLuk7yq+XedvT4gLFi9XYr880NrBP 5mBRcVGdTORwmTEVA2RaWrs7kU6BFQzbzzCjtipMDM3Tb1gKz+99bKMX88AwrPtPgZ bkz73VsSUIbG6us1H1nhwB6z4u1q+yUYcbQ1OIurD950oqwmcFK5gepPRV/og6CODx uBHAedRYltlIA== 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, Andrii Nakryiko Subject: [PATCH bpf-next 04/10] lib/buildid: rename build_id_parse() into build_id_parse_nofault() Date: Tue, 9 Jul 2024 13:42:39 -0700 Message-ID: <20240709204245.3847811-5-andrii@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240709204245.3847811-1-andrii@kernel.org> References: <20240709204245.3847811-1-andrii@kernel.org> MIME-Version: 1.0 X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 40F7114001F X-Stat-Signature: 9imkkjhec7cee14t95a7grq7jir1uht8 X-HE-Tag: 1720557786-522672 X-HE-Meta: U2FsdGVkX19JeEYhpXSyHP+janoYB2LKYK1eupp7afR92zVRzJP+2/OxRSOOeulH4cxKRozDoXeGn3PjzVNioGWhyhlARwslglFH/8E1e1qfTtVWukpE7jLn4YS03fcqoonUH4gfaemxSU3a+EifwgqkApslC35Z2itlqoG7gOZvhfRfRwV7m+GffN0iwoxK0lKwtMOUZDJSVmErjjdRFULCFRjToG8cmgQIYlbjRTIa+9xz4P7qqk4LgLIpZ7sfBKhPrzhCdt/xHJyLvu15pbU7Tg2KFVyIKAZw6v0JwSqeymOS4bq7COltU3b2KXHBB8/3QT9SDH6mvI960K2aceQvxVsPdK3+XpCRQqZwJibmGGmdbJnsrIhaCSH9xjEsHe7rfkkEDsnSOkJqgmdQ0UYMEEmGJI1lj0DehmMdyzPsUBn5AWXYEz2NX10m6xVTEkxo1WtPkpWysfOKIuK1gQ6OQSuuH6IrvCXRUDUlGy04IhQ/MG1MFlXQARGhY8PBA5XcSot+qbb+NP5SflhY5JUby/Kif1Ro5qg74ujRFYJEwnEjlx5Gx2ssiRMU8hM2nvM3MY5kK5IaKLvfYAwNmad7Ofto8UTt2ZQTI7BNg4TtjM1DxFXpcBMIxwzGIfH8ub33fLcYCzj7212vHVZIKQQ7pQFmcqSz7tjc8vv5RTngWqKMB8AAn8P1gr+KI+0NERQcFYHTeuyv+eM7ZXDiJDORGAoTmnPNR4U0SxJccmOuI2KnSKwfAhcvAHXn9IcQM0zHAVJp0/OmuYfkAIKI+lIyiQtX92gEKc1LisyYeq/JHp5sX52JmmVsANyJYbjQzyoZ5XvcIZQkmmBgVX47UyZ56EAOFw0nzeQNP8ti6vZcYjORy7v8HmYIeZDKB1eEo9+kKQfFJ9f9/TzFbtGTl4NQBUVmMyz817fQsfWPTBbwdCQDHIe0ySjX4gVheosdBatp9okC+mEU24VR48l 1Co1krTz p28bGYdCKLrx8Fxr2ljxshw3P9kdK1c7PDu/xP2qmvxVtER/hqV4aII76he2/3DGbs4UMpvrptDnZOln2wyLJZ/aq40WfMPrzLXWIS4tG+2DyU2vCeX63rifTATAsE7kwIwil9I+uuE6i64rSLUHA9BY/lE7lr8qxPhPbXwCpRV03/Mmwi9orpLaIQHfH3FGiD3/yIvVt18DasLC8EYiFeNcmpqBuwuusYMFNhmPZVafn1JLC0ArXZ4ToWP++LAzEz9Xgi/jcmRl+N1Cxlg1chImmIwRmt+ube7sh 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: Make it clear that build_id_parse() assumes that it can take no page fault by renaming it and current few users to build_id_parse_nofault(). Also add build_id_parse() stub, which will be implemented in subsequent patches, just to preserve succesful kernel compilation if another upcoming user of build_id_parse() (PROCMAP_QUERY ioctl() for /proc//maps, see [0]) gets merged with bpf-next tree. That ioctl() users of build_id_parse() doesn't have no-page-fault restriction, so it will automatically benefit from sleepable implementation. [0] https://lore.kernel.org/linux-mm/20240627170900.1672542-4-andrii@kernel.org/ Signed-off-by: Andrii Nakryiko --- include/linux/buildid.h | 4 ++-- kernel/bpf/stackmap.c | 2 +- kernel/events/core.c | 2 +- lib/buildid.c | 24 +++++++++++++++++++++--- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/include/linux/buildid.h b/include/linux/buildid.h index 20aa3c2d89f7..014a88c41073 100644 --- a/include/linux/buildid.h +++ b/include/linux/buildid.h @@ -7,8 +7,8 @@ #define BUILD_ID_SIZE_MAX 20 struct vm_area_struct; -int build_id_parse(struct vm_area_struct *vma, unsigned char *build_id, - __u32 *size); +int build_id_parse(struct vm_area_struct *vma, unsigned char *build_id, __u32 *size); +int build_id_parse_nofault(struct vm_area_struct *vma, unsigned char *build_id, __u32 *size); int build_id_parse_buf(const void *buf, unsigned char *build_id, u32 buf_size); #if IS_ENABLED(CONFIG_STACKTRACE_BUILD_ID) || IS_ENABLED(CONFIG_VMCORE_INFO) diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c index c99f8e5234ac..770ae8e88016 100644 --- a/kernel/bpf/stackmap.c +++ b/kernel/bpf/stackmap.c @@ -156,7 +156,7 @@ static void stack_map_get_build_id_offset(struct bpf_stack_build_id *id_offs, goto build_id_valid; } vma = find_vma(current->mm, ips[i]); - if (!vma || build_id_parse(vma, id_offs[i].build_id, NULL)) { + if (!vma || build_id_parse_nofault(vma, id_offs[i].build_id, NULL)) { /* per entry fall back to ips */ id_offs[i].status = BPF_STACK_BUILD_ID_IP; id_offs[i].ip = ips[i]; diff --git a/kernel/events/core.c b/kernel/events/core.c index f0128c5ff278..e3927b688699 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -8812,7 +8812,7 @@ static void perf_event_mmap_event(struct perf_mmap_event *mmap_event) mmap_event->event_id.header.size = sizeof(mmap_event->event_id) + size; if (atomic_read(&nr_build_id_events)) - build_id_parse(vma, mmap_event->build_id, &mmap_event->build_id_size); + build_id_parse_nofault(vma, mmap_event->build_id, &mmap_event->build_id_size); perf_iterate_sb(perf_event_mmap_output, mmap_event, diff --git a/lib/buildid.c b/lib/buildid.c index 49fcb9a549bf..5f898fee43d7 100644 --- a/lib/buildid.c +++ b/lib/buildid.c @@ -276,10 +276,12 @@ static int get_build_id_64(struct freader *r, unsigned char *build_id, __u32 *si * @build_id: buffer to store build id, at least BUILD_ID_SIZE long * @size: returns actual build id size in case of success * - * Return: 0 on success, -EINVAL otherwise + * Assumes no page fault can be taken, so if relevant portions of ELF file are + * not already paged in, fetching of build ID fails. + * + * Return: 0 on success; negative error, otherwise */ -int build_id_parse(struct vm_area_struct *vma, unsigned char *build_id, - __u32 *size) +int build_id_parse_nofault(struct vm_area_struct *vma, unsigned char *build_id, __u32 *size) { const Elf32_Ehdr *ehdr; struct freader r; @@ -318,6 +320,22 @@ int build_id_parse(struct vm_area_struct *vma, unsigned char *build_id, return ret; } +/* + * Parse build ID of ELF file mapped to VMA + * @vma: vma object + * @build_id: buffer to store build id, at least BUILD_ID_SIZE long + * @size: returns actual build id size in case of success + * + * Assumes faultable context and can cause page faults to bring in file data + * into page cache. + * + * Return: 0 on success; negative error, otherwise + */ +int build_id_parse(struct vm_area_struct *vma, unsigned char *build_id, __u32 *size) +{ + return -EOPNOTSUPP; +} + /** * build_id_parse_buf - Get build ID from a buffer * @buf: ELF note section(s) to parse