From nobody Fri Jun 12 22:47:00 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 4898F383304 for ; Tue, 12 May 2026 03:29:44 +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=1778556585; cv=none; b=mXrfcag0fy+ny8vvl7StLbCVwtXVDAmn2ZH60cP+iDPiLN1lI++6i493MR6Vwa7ujqnMFP+F0yqG7b4EQR6deEKsW717OPg8QGjiz+CYZVvzmhXoDaO11cVYceB7Lbpzc4BtjuutT45k4M3Z4uLWUJy/p0kLVn5wQF0/X1R09Ww= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778556585; c=relaxed/simple; bh=/6E4Uj1V5dxCdPU6zojMhfvBzk9DWzYdC9lbgSXe2yg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lansTPo/1VeKkUpf+qkNGLKQ4QHKACCFWXdcoDK8h51w+bS+1uRPYDktdF9x/UFw506GgFcGaYWiCA1qD2vKDGIh0Bcy5loBPRKuuMk5I6NzzL91te8JWUk22AstpH9lSR5jvSIpeOIuRODQSLnKv454HC6kXumE/lEwuVEnLDw= 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=FUXb61qv; 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="FUXb61qv" 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=1778556582; 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=FUXb61qvtsA6nwZSbEffPgOD6NXCCA+qDYizsRrBHPUlYBuB/t6dPONI7C30GKDAmZabs4 +piW37RGYVElaheTAym+9bX7jeb5KlPfs32i3mlLf6DageuEipl09ibEECwHq+bVzL0/f4 Y0qTerIA52gt4fQlpsa7esPztBF050M= 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 v3 1/3] bpf: Factor out stack_map_build_id_set_ip() in stackmap.c Date: Mon, 11 May 2026 20:29:04 -0700 Message-ID: <20260512032906.2670326-2-ihor.solodrai@linux.dev> In-Reply-To: <20260512032906.2670326-1-ihor.solodrai@linux.dev> References: <20260512032906.2670326-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 22:47:00 2026 Received: from out-185.mta0.migadu.com (out-185.mta0.migadu.com [91.218.175.185]) (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 4A1F036A35C for ; Tue, 12 May 2026 03:29:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.185 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778556588; cv=none; b=Q9w+ro+x2ghX78VLqoJlIdrB9xGq17RP+P6zpTzJciZHta9fteVfb46BIqy87FLqqCbovYZ5cFEp90gVwhsCrwikaC66FMyf7Ph/oYNzuibdnkf+5ZCsjv5UJlT0Q7Yuq6mQ5YI0YtWuWYI0bSDZrRh1NHxAPhm6QSMkXyva9gE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778556588; c=relaxed/simple; bh=9ysmXqcq6yywIVEXg3qZmzNnV0dO0flBjGmZ5AWDRwc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=goaDleAw2vDelUB6Y65YZhRFyaj5co5UvBczlm6iixEZ1j+d8xySNkNYT8K1wcwwnOWCzVs7WRJD0MCF1r2KliuxFhmG/1MZwuLW3IV6tDl5QB0i4BU4nNa6ESgbHsdVZl0mYqmJVwthEMWnsCSj+b8PwKQEDUO1hGw0aysYQAY= 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=QlF5DRK2; arc=none smtp.client-ip=91.218.175.185 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="QlF5DRK2" 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=1778556585; 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=vj8tMsyX4vmxJRdOYM1l8iq31iyGWVIESSJoDNB31qk=; b=QlF5DRK2MiSbOtCXwqyUooWQNRlS0BDUEtW27BdpqOY48D3Z8JOLq7xRgCJgPqxeEgStDm bYaKaRQ+mnjyabg7mblITS5+AvYcibnItBSMhWwlJmwwkw05OS2gl1v/kQ5NtdTVW9u8xr zFoPXm2QjBd/BrU5/iNFq1ud7zey2aM= 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 v3 2/3] bpf: Avoid faultable build ID reads under mm locks Date: Mon, 11 May 2026 20:29:05 -0700 Message-ID: <20260512032906.2670326-3-ihor.solodrai@linux.dev> In-Reply-To: <20260512032906.2670326-1-ihor.solodrai@linux.dev> References: <20260512032906.2670326-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: 777a8560fd29 ("lib/buildid: use __kernel_read() for sleepable contex= t") Assisted-by: Codex:gpt-5.4 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 22:47:00 2026 Received: from out-178.mta0.migadu.com (out-178.mta0.migadu.com [91.218.175.178]) (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 DDA0F383304 for ; Tue, 12 May 2026 03:29:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778556591; cv=none; b=kh151YVzPnRJyPNkAicJHIvT1g6IwiCY3JnFlagVNk0txXredZ1wLhibJ7i+sJX/RrRPs/cz0TNFJBQiBGIOTDLa2Epd9ZAeErGm2U4i4ag/kjK/gAtnuVsBVY9VDDOMN2HacCgo/hpyBLLFmPbnHYpG6Riykll2+FuvLjNqTyY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778556591; c=relaxed/simple; bh=6dC5rvFzxuabGgciG0/6aQdl7x3eEwrj1UYxfioRTWw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uns5p52GnGZz7gNkJ91gr+CvRU73J4WyfDKyOxhQRZvoBNi/yxrhBuAWqYvFt1/cRMDV1JQQlmTB0U8BdFRnyGLBooOFCHDtJjBr8tZfPTKg8zjEGIkal12Y3WTCtYiqUl0VkV2rlFhtVGbaNr1QtCvv34G9VLN28pt8IetFCxI= 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=jS8b+EFQ; arc=none smtp.client-ip=91.218.175.178 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="jS8b+EFQ" 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=1778556588; 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=3d5xLhMxD/AZ4bzcWoDlbHQbIevCAOLUrNaq4k4mG4Y=; b=jS8b+EFQbobQJv4vu8/VkplnHYGBsxOIekLkZencjCi/tU3bqHib5e3+KzURSMIZrtqQrU D+1Be28VS3m/BMdfvT0RulAPXkABdkGVqPEbSvMu5aDbzTTa1tuEexGbh0CwqJGiRS9a7d /R4fBw9NKSspsyJ7TWtvt/jG0LFhTF4= 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 v3 3/3] bpf: Cache build IDs in sleepable stackmap path Date: Mon, 11 May 2026 20:29:06 -0700 Message-ID: <20260512032906.2670326-4-ihor.solodrai@linux.dev> In-Reply-To: <20260512032906.2670326-1-ihor.solodrai@linux.dev> References: <20260512032906.2670326-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 Signed-off-by: Ihor Solodrai Acked-by: Mykyta Yatsenko --- kernel/bpf/stackmap.c | 51 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c index c1e96df360c3..318ce9ed0dd5 100644 --- a/kernel/bpf/stackmap.c +++ b/kernel/bpf/stackmap.c @@ -226,13 +226,34 @@ 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 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) { + memcpy(id_offs[i].build_id, cache.build_id, BUILD_ID_SIZE_MAX); + 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 +261,22 @@ 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. + */ + memcpy(id_offs[i].build_id, cache.build_id, BUILD_ID_SIZE_MAX); + 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 +285,22 @@ 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: + 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