Skip to content

fix(so): reuse pinned dkapture bpf objects correctly#97

Open
yuKing123-king wants to merge 1 commit into
DKapture:mainfrom
yuKing123-king:fix/bpf-manager_reuse_pinError
Open

fix(so): reuse pinned dkapture bpf objects correctly#97
yuKing123-king wants to merge 1 commit into
DKapture:mainfrom
yuKing123-king:fix/bpf-manager_reuse_pinError

Conversation

@yuKing123-king

Copy link
Copy Markdown
Contributor

No description provided.

Comment thread so/bpf-manager.cpp
struct bpf_map_info info = {};
u32 len = sizeof(info);
std::string map_pin_path(PIN_PATH "/map-");
std::string map_pin_path(PIN_PATH "/");

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

为什么改这

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

因为在bpf-manager.cpp:207中bpf_object__pin_maps(m_obj->obj, PIN_PATH);这个函数会调用 libbpf,把当前 BPF object 里的所有 maps pin 到 PIN_PATH 下。但是libbpf 默认会用 map 自己的名字作为最后一级文件名,而没有map-这个前缀。以map-dk_shared_mem 这个map为例, 会导致

  1. 存在性判断永远看错地方,代码以为 /sys/fs/bpf/dkapture/map-dk_shared_mem 不存在,于是误判“需要新建”。
  2. 实际创建时又去创建真正的 dk_shared_mem, 但这个真实 pin 已经存在,于是 libbpf 报: failed to pin map: File exists
  3. 并且当前仓库里没有把 map pin 成 map-xxx 的定义

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants