From nobody Fri Jun 12 12:43:11 2026 Received: from out-172.mta0.migadu.com (out-172.mta0.migadu.com [91.218.175.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8058A3A5449 for ; Thu, 14 May 2026 18:48:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778784490; cv=none; b=daqYb+/577v1+T5t7eHTY7/jh18DdRfJWqtmnfSBITuo2SqaALK1A1sNSEulZms06KVPS4FCTeO/jAL72WH4lxA7g/xjiwYG6QeYD5g14bBkLZFbC+6DHZS5i8QzchMYobqP8eLO89qfhP22z9ir84LdFsy1PoFoBoTGrlvXgKc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778784490; c=relaxed/simple; bh=/6E4Uj1V5dxCdPU6zojMhfvBzk9DWzYdC9lbgSXe2yg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r09hgAxVF5DJJE4Oi42FvZUeB1utjxk6GmlTxygbrwdc88xSYrgEYhtIEwox12HiKNi7OC8zwFhgPy7JTH7S/5le6gJT6Ztg6/GieMBtVCvoQ6pc+ExRe3VDX4jSVdS1hBk7AWoc6xfTA/vK9DteafskiBS5Q1xr4Z7DHcfmsuw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=FksoVacG; arc=none smtp.client-ip=91.218.175.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="FksoVacG" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1778784483; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ALIqiwZGQGc8gWzhYBCduPwwRPxukG0LlNeus3Maqs8=; b=FksoVacG/5hseH+kg4VmNT0ez8G0zts1xDsbv2St0ejKV2BEs6aNBDdxKpTK4JQqSmgREL S4NfjRQwCwCMttTgfBawN8b6D+RXJT70gvKH5y7+o7Z62gvDepkjnMpN7ajcT8DIupn6Zl 3VcG06pVyL8b880HdS05Mr9lZVHnUa8= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Kumar Kartikeya Dwivedi Cc: Puranjay Mohan , Shakeel Butt , Mykyta Yatsenko , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v4 1/3] bpf: Factor out stack_map_build_id_set_ip() in stackmap.c Date: Thu, 14 May 2026 11:47:25 -0700 Message-ID: <20260514184727.1067141-2-ihor.solodrai@linux.dev> In-Reply-To: <20260514184727.1067141-1-ihor.solodrai@linux.dev> References: <20260514184727.1067141-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Factor out a small helper from stack_map_get_build_id_offset() in preparation for adding a sleepable build ID resolution path. No functional changes. Acked-by: Mykyta Yatsenko Signed-off-by: Ihor Solodrai --- kernel/bpf/stackmap.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c index da3d328f5c15..4ef0fd06cea5 100644 --- a/kernel/bpf/stackmap.c +++ b/kernel/bpf/stackmap.c @@ -152,6 +152,12 @@ static int fetch_build_id(struct vm_area_struct *vma, = unsigned char *build_id, b : build_id_parse_nofault(vma, build_id, NULL); } =20 +static inline void stack_map_build_id_set_ip(struct bpf_stack_build_id *id) +{ + id->status =3D BPF_STACK_BUILD_ID_IP; + memset(id->build_id, 0, BUILD_ID_SIZE_MAX); +} + /* * Expects all id_offs[i].ip values to be set to correct initial IPs. * They will be subsequently: @@ -165,23 +171,21 @@ static int fetch_build_id(struct vm_area_struct *vma,= unsigned char *build_id, b static void stack_map_get_build_id_offset(struct bpf_stack_build_id *id_of= fs, u32 trace_nr, bool user, bool may_fault) { - int i; struct mmap_unlock_irq_work *work =3D NULL; bool irq_work_busy =3D bpf_mmap_unlock_get_irq_work(&work); + bool has_user_ctx =3D user && current && current->mm; struct vm_area_struct *vma, *prev_vma =3D NULL; const char *prev_build_id; + int i; =20 /* If the irq_work is in use, fall back to report ips. Same * fallback is used for kernel stack (!user) on a stackmap with * build_id. */ - if (!user || !current || !current->mm || irq_work_busy || - !mmap_read_trylock(current->mm)) { + if (!has_user_ctx || irq_work_busy || !mmap_read_trylock(current->mm)) { /* cannot access current->mm, fall back to ips */ - for (i =3D 0; i < trace_nr; i++) { - id_offs[i].status =3D BPF_STACK_BUILD_ID_IP; - memset(id_offs[i].build_id, 0, BUILD_ID_SIZE_MAX); - } + for (i =3D 0; i < trace_nr; i++) + stack_map_build_id_set_ip(&id_offs[i]); return; } =20 @@ -196,8 +200,7 @@ static void stack_map_get_build_id_offset(struct bpf_st= ack_build_id *id_offs, vma =3D find_vma(current->mm, ip); if (!vma || fetch_build_id(vma, id_offs[i].build_id, may_fault)) { /* per entry fall back to ips */ - id_offs[i].status =3D BPF_STACK_BUILD_ID_IP; - memset(id_offs[i].build_id, 0, BUILD_ID_SIZE_MAX); + stack_map_build_id_set_ip(&id_offs[i]); continue; } build_id_valid: --=20 2.54.0 From nobody Fri Jun 12 12:43:11 2026 Received: from out-183.mta0.migadu.com (out-183.mta0.migadu.com [91.218.175.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 98BCD3A0B13 for ; Thu, 14 May 2026 18:48:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.183 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778784494; cv=none; b=OcZwy7kLJccBvvJ+4zHow1BsJJajxktde6YmkoMb1amtZxW90Qs48yKWEPVg8kGOVZYJEe36rVF3TzmiEPXSQzzWUFHu5HrRlXPgCuo77/6pf4gz6hTalx2C0T7o6ICnpgb4b49ZWr3UozP30MeupV6FEm4DJhMCK7maUP9bCgA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778784494; c=relaxed/simple; bh=BhOSSkVm62e4oj2SU0/riFCDVWlbQeiSQcEROgZ3D8Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mmI/bxZHW/1CCMtCQxs07SAZZ2an+rycYirP3kFmhyoKNj2puY3iX6CTD41CH+khuMbLsclGC7nCf9T58bzAatu74uZJAt81Gp66vSveEg7c3C/qJD7wCbYwVvFa3BPD6cPmklwyaNEXXGrUyqpDoWluTQPIYNd5ohl1lhOybmA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=opBi7J6E; arc=none smtp.client-ip=91.218.175.183 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="opBi7J6E" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1778784486; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=vTQUFXQQ4gAuugVKJWsSuk2OTC94//edl3ECkXYmpds=; b=opBi7J6E5AVo2MlU9c2kgTrndlr0DoCHRI/QzAXPJvEkCGb3Hes43CB8qgIIeJxDa81COL UZOMG6suIFgugB38ltXXvBM1daHLtrhHeW4U3A7lvyXKuFdoKWR1CfMqzQrwlbTYPWpFqc pwF4jthlg1Fa2bbwGrLpgffZnZlXJuM= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Kumar Kartikeya Dwivedi Cc: Puranjay Mohan , Shakeel Butt , Mykyta Yatsenko , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v4 2/3] bpf: Avoid faultable build ID reads under mm locks Date: Thu, 14 May 2026 11:47:26 -0700 Message-ID: <20260514184727.1067141-3-ihor.solodrai@linux.dev> In-Reply-To: <20260514184727.1067141-1-ihor.solodrai@linux.dev> References: <20260514184727.1067141-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Sleepable build ID parsing can block in __kernel_read() [1], so the stackmap sleepable path must not call it while holding mmap_lock or a per-VMA read lock. The issue and the fix are conceptually similar to a recent procfs patch [2]. Resolve each covered VMA with a stable read-side reference, preferring lock_vma_under_rcu() and falling back to mmap_read_trylock() only long enough to acquire the VMA read lock. Take a reference to the backing file, drop the VMA lock, and then parse the build ID through (sleepable) build_id_parse_file(). [1]: https://lore.kernel.org/all/20251218005818.614819-1-shakeel.butt@linux= .dev/ [2]: https://lore.kernel.org/all/20260128183232.2854138-1-andrii@kernel.org/ Fixes: d4dd9775ec24 ("bpf: wire up sleepable bpf_get_stack() and bpf_get_ta= sk_stack() helpers") Suggested-by: Puranjay Mohan Signed-off-by: Ihor Solodrai --- kernel/bpf/stackmap.c | 105 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c index 4ef0fd06cea5..c1e96df360c3 100644 --- a/kernel/bpf/stackmap.c +++ b/kernel/bpf/stackmap.c @@ -9,6 +9,7 @@ #include #include #include +#include #include "percpu_freelist.h" #include "mmap_unlock_work.h" =20 @@ -158,6 +159,105 @@ static inline void stack_map_build_id_set_ip(struct b= pf_stack_build_id *id) memset(id->build_id, 0, BUILD_ID_SIZE_MAX); } =20 +struct stack_map_vma_lock { + bool vma_locked; + struct vm_area_struct *vma; + struct mm_struct *mm; +}; + +static struct vm_area_struct * +stack_map_lock_vma(struct stack_map_vma_lock *lock, unsigned long ip) +{ + struct mm_struct *mm =3D lock->mm; + struct vm_area_struct *vma; + + if (WARN_ON_ONCE(!mm)) + return NULL; + + vma =3D lock_vma_under_rcu(mm, ip); + if (vma) + goto vma_locked; + + if (!mmap_read_trylock(mm)) + return NULL; + + vma =3D vma_lookup(mm, ip); + if (!vma) { + mmap_read_unlock(mm); + return NULL; + } + +#ifdef CONFIG_PER_VMA_LOCK + if (!vma_start_read_locked(vma)) { + mmap_read_unlock(mm); + return NULL; + } + mmap_read_unlock(mm); +#else + mmap_read_unlock(mm); + return NULL; +#endif +vma_locked: + lock->vma_locked =3D true; + lock->vma =3D vma; + return vma; +} + +static void stack_map_unlock_vma(struct stack_map_vma_lock *lock) +{ + struct vm_area_struct *vma =3D lock->vma; + + if (lock->vma_locked) { + if (WARN_ON_ONCE(!vma)) + goto out; + vma_end_read(vma); + } +out: + lock->vma_locked =3D false; + lock->vma =3D NULL; +} + +static void stack_map_get_build_id_offset_sleepable(struct bpf_stack_build= _id *id_offs, + u32 trace_nr) +{ + struct mm_struct *mm =3D current->mm; + struct stack_map_vma_lock lock =3D { + .vma_locked =3D false, + .vma =3D NULL, + .mm =3D mm, + }; + unsigned long vm_pgoff, vm_start; + struct vm_area_struct *vma; + struct file *file; + u64 ip; + + for (u32 i =3D 0; i < trace_nr; i++) { + ip =3D READ_ONCE(id_offs[i].ip); + vma =3D stack_map_lock_vma(&lock, ip); + if (!vma || !vma->vm_file) { + stack_map_build_id_set_ip(&id_offs[i]); + stack_map_unlock_vma(&lock); + continue; + } + + file =3D get_file(vma->vm_file); + vm_pgoff =3D vma->vm_pgoff; + vm_start =3D vma->vm_start; + stack_map_unlock_vma(&lock); + + /* build_id_parse_file() may block on filesystem reads */ + if (build_id_parse_file(file, id_offs[i].build_id, NULL)) { + stack_map_build_id_set_ip(&id_offs[i]); + fput(file); + continue; + } + fput(file); + + id_offs[i].offset =3D (vm_pgoff << PAGE_SHIFT) + ip - vm_start; + id_offs[i].status =3D BPF_STACK_BUILD_ID_VALID; + } +} + /* * Expects all id_offs[i].ip values to be set to correct initial IPs. * They will be subsequently: @@ -178,6 +278,11 @@ static void stack_map_get_build_id_offset(struct bpf_s= tack_build_id *id_offs, const char *prev_build_id; int i; =20 + if (may_fault && has_user_ctx) { + stack_map_get_build_id_offset_sleepable(id_offs, trace_nr); + return; + } + /* If the irq_work is in use, fall back to report ips. Same * fallback is used for kernel stack (!user) on a stackmap with * build_id. --=20 2.54.0 From nobody Fri Jun 12 12:43:11 2026 Received: from out-179.mta0.migadu.com (out-179.mta0.migadu.com [91.218.175.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2FC01391835 for ; Thu, 14 May 2026 18:48:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778784495; cv=none; b=ku8zPGwNUAl0kDbxbvpPrIBiNVqdce/XfxW3ZV70zR9g89wUV494s+qwrijhInoGHl1K/sruEgv1uXn2v6Awg9WV1ptyqga04kKHSKAtswo32VAzZCS3yeHFRctsAjZD/j6nSMO+l8snKaLGj5HIu7AeIVXo/T0Z1zuD2zBrNoA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778784495; c=relaxed/simple; bh=SEJLxkUc3a4zC/0vofv6O41mri+bKb/KJQn5IlmMPaY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=akMW/+QQI28Wgh8pZjAcvpxDELS87tB8TsMUzIELgOTephtGfhTCot6jVsuJVvKCn40MPPv2PJcDBZC/OO5RITiB3DRx/K+A3eB5VMRFBgQdlwfEd1jiICpOCs07SGDJyhPwagC3ZSppz2uksNVeJ8RcrnlB9HZ+NgPHhIwJE7g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=kiAtmRh4; arc=none smtp.client-ip=91.218.175.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="kiAtmRh4" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1778784489; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nsV2n850V2giuT7gMxB20oCBEBNEBQ9JbDBdD/myrbU=; b=kiAtmRh4me3V7cLS0hu82rAnvsCdm0KgwgZyEy7C4PKh1sQnL2UdRSGnCPgsP1rEK7JMkm iX5ntRcIAi37estmRvUgPZsiZa3DALvVlXYUwLbV1pxakYaPEm7rUUWtGTJ1TUYIPQIfwA s/KCEdBZIBCqnUGwRBlrOoBiruTL8/U= From: Ihor Solodrai To: Alexei Starovoitov , Andrii Nakryiko , Daniel Borkmann , Eduard Zingerman , Kumar Kartikeya Dwivedi Cc: Puranjay Mohan , Shakeel Butt , Mykyta Yatsenko , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@meta.com Subject: [PATCH bpf v4 3/3] bpf: Cache build IDs in sleepable stackmap path Date: Thu, 14 May 2026 11:47:27 -0700 Message-ID: <20260514184727.1067141-4-ihor.solodrai@linux.dev> In-Reply-To: <20260514184727.1067141-1-ihor.solodrai@linux.dev> References: <20260514184727.1067141-1-ihor.solodrai@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Stack traces often contain adjacent IPs from the same VMA or from different VMAs backed by the same ELF file. Cache the last successfully parsed build ID together with the resolved VMA range and backing file so the sleepable build-ID path can avoid repeated VMA locking and file parsing in common cases. Suggested-by: Mykyta Yatsenko Acked-by: Mykyta Yatsenko Signed-off-by: Ihor Solodrai --- kernel/bpf/stackmap.c | 56 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c index c1e96df360c3..8a18c9645933 100644 --- a/kernel/bpf/stackmap.c +++ b/kernel/bpf/stackmap.c @@ -226,13 +226,33 @@ static void stack_map_get_build_id_offset_sleepable(s= truct bpf_stack_build_id *i .vma =3D NULL, .mm =3D mm, }; - unsigned long vm_pgoff, vm_start; + struct { + struct file *file; + const unsigned char *build_id; + unsigned long vm_start; + unsigned long vm_end; + unsigned long vm_pgoff; + } cache =3D {}; + unsigned long vm_pgoff, vm_start, vm_end; struct vm_area_struct *vma; struct file *file; u64 ip; =20 for (u32 i =3D 0; i < trace_nr; i++) { ip =3D READ_ONCE(id_offs[i].ip); + + /* + * Range cache fast path: if ip falls within the previously + * resolved VMA range, reuse the cache build_id without + * re-acquiring the VMA lock. + */ + if (cache.build_id && ip >=3D cache.vm_start && ip < cache.vm_end) { + vm_start =3D cache.vm_start; + vm_end =3D cache.vm_end; + vm_pgoff =3D cache.vm_pgoff; + goto build_id_valid; + } + vma =3D stack_map_lock_vma(&lock, ip); if (!vma || !vma->vm_file) { stack_map_build_id_set_ip(&id_offs[i]); @@ -240,9 +260,21 @@ static void stack_map_get_build_id_offset_sleepable(st= ruct bpf_stack_build_id *i continue; } =20 - file =3D get_file(vma->vm_file); + file =3D vma->vm_file; vm_pgoff =3D vma->vm_pgoff; vm_start =3D vma->vm_start; + vm_end =3D vma->vm_end; + + if (file =3D=3D cache.file) { + /* + * Same backing file as previous (e.g. different VMAs + * of the same ELF binary). Reuse the cache build_id. + */ + stack_map_unlock_vma(&lock); + goto build_id_valid; + } + + file =3D get_file(file); stack_map_unlock_vma(&lock); =20 /* build_id_parse_file() may block on filesystem reads */ @@ -251,11 +283,29 @@ static void stack_map_get_build_id_offset_sleepable(s= truct bpf_stack_build_id *i fput(file); continue; } - fput(file); =20 + if (cache.file) + fput(cache.file); + cache.file =3D file; + cache.build_id =3D id_offs[i].build_id; + +build_id_valid: + /* + * In the slow path cache.build_id points to id_offs[i].build_id. + * Cache hits leave cache.build_id pointing at a prior slot, + * triggering the memcpy here. + */ + if (cache.build_id !=3D id_offs[i].build_id) + memcpy(id_offs[i].build_id, cache.build_id, BUILD_ID_SIZE_MAX); + cache.vm_start =3D vm_start; + cache.vm_end =3D vm_end; + cache.vm_pgoff =3D vm_pgoff; id_offs[i].offset =3D (vm_pgoff << PAGE_SHIFT) + ip - vm_start; id_offs[i].status =3D BPF_STACK_BUILD_ID_VALID; } + + if (cache.file) + fput(cache.file); } =20 /* --=20 2.54.0