如何解决eBPF:将新的内部地图插入到“ BPF_MAP_TYPE_HASH_OF_MAPS”吗?
我正在尝试实现LSM BPF程序,并且我想使用BPF_MAP_TYPE_HASH_OF_MAPS
来存储每个超级块的信息,因为sb_alloc_security
LSM挂钩被触发了。例如,我想将地图定义为:
struct bpf_map_def SEC("SBMap") outer_map = {
.type = BPF_MAP_TYPE_HASH_OF_MAPS,.key_size = sizeof(uuid_t),// super block unique identifier
.value_size = sizeof(__u32),// must be u32 because it is inner map id
.max_entries = 1024,// for now,let's assume we care about only 1024 super blocks
};
我想使用超级块的UUID作为outer_map
的密钥,并且每次分配新的超级块时,我都想创建一个新的内部映射,例如:
SEC("lsm/sb_alloc_security")
int BPF_PROG(sb_alloc_security,struct super_block *sb) {
uuid_t key = sb->s_uuid; // use super block UUID as key to the outer_map
// If key does not exist in outer_map,// create a new inner map and insert it
// into the outer_map with the key
}
但是似乎只能在用户空间中创建地图。有什么解决方法吗?
解决方法
是的, BPF映射只能从用户空间创建,包括内部映射结构的内部映射。如果您可以从BPF程序中创建映射,那么它将实质上启用动态内存分配。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。