From 2ba22f25e47ce7b2b5195d40bb04ae9d6d445dea Mon Sep 17 00:00:00 2001 From: Neill Kapron Date: Wed, 13 Aug 2025 21:59:31 +0000 Subject: [PATCH] BPFloader: Skip global map sections Certain BPF progams have sections .rodata.str1.1 or .data for global data. These sections are processed/loaded implicitly by libbpf, but it may be useful for the developer to pin them. Change the logic so if a descriptor for these sections is found, pin them. If not, ignore them and don't cause a failure. Bug: 401458418 Test: Manual: program with bpf_printk and global data loads. Change-Id: Ib3be55cf903e24c6692730b57b0ce90c9a9e0795 Signed-off-by: Neill Kapron --- loader/bpfloader.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/loader/bpfloader.rs b/loader/bpfloader.rs index 29e637a..978a3cd 100644 --- a/loader/bpfloader.rs +++ b/loader/bpfloader.rs @@ -518,10 +518,6 @@ fn libbpf_worker(file_desc: &BpfFileDesc) -> Result<(), anyhow::Error> { let name = map.name().to_str().ok_or_else(|| anyhow!("Failed to parse map name into UTF-8"))?; let name = String::from(name); - if name.ends_with(".rodata") { - // Skip pinning map for .rodata section. - continue; - } for map_desc in file_desc.maps { if map_desc.name == name { desc_found = true; @@ -556,6 +552,12 @@ fn libbpf_worker(file_desc: &BpfFileDesc) -> Result<(), anyhow::Error> { break; } } + if !desc_found && (name.contains(".rodata") || name.contains(".data")) { + // Skip required pinning map for .rodata, .rodata.str1.1, and .data sections. + info!("Optional map descriptor for {name} not found, ignoring"); + continue; + } + ensure!(desc_found, "Map descriptor for {name} not found!"); }