aya: set .rodata maps as BPF_F_RDONLY.

pull/117/head
Thia Wyrod 3 years ago
parent df393690d3
commit 4dcf46e357
No known key found for this signature in database
GPG Key ID: 55D3AB7E5658CA0C

@ -510,20 +510,31 @@ impl From<KernelVersion> for u32 {
}
}
fn data_section_def(section: &Section, map_flags: u32) -> bpf_map_def {
bpf_map_def {
map_type: BPF_MAP_TYPE_ARRAY as u32,
key_size: mem::size_of::<u32>() as u32,
// We need to use section.size here since
// .bss will always have data.len() == 0
value_size: section.size as u32,
max_entries: 1,
map_flags,
..Default::default()
}
}
fn parse_map(section: &Section, name: &str) -> Result<Map, ParseError> {
let (def, data) = if name == ".bss" || name.starts_with(".data") || name.starts_with(".rodata")
{
let def = bpf_map_def {
map_type: BPF_MAP_TYPE_ARRAY as u32,
key_size: mem::size_of::<u32>() as u32,
// We need to use section.size here since
// .bss will always have data.len() == 0
value_size: section.size as u32,
max_entries: 1,
map_flags: 0, /* FIXME: set rodata readonly */
..Default::default()
};
(def, section.data.to_vec())
// TODO: Create an equivalent of aya-bpf-bindings for aya and define this
// there. This value is the same across armv7, amd64, and aarch64.
const BPF_F_RDONLY: u32 = 8;
let (def, data) = if name == ".bss" || name.starts_with(".data") {
(data_section_def(section, 0), section.data.to_vec())
} else if name.starts_with(".rodata") {
(
data_section_def(section, BPF_F_RDONLY),
section.data.to_vec(),
)
} else {
(parse_map_def(name, section.data)?, Vec::new())
};

Loading…
Cancel
Save