我无法加载使用 kprobe 跟踪路径重命名的 eBPF 脚本:
int kprobe__security_path_rename( struct pt_regs *ctx, const struct path *old_dir, struct dentry *old_dentry, const struct path *new_dir, struct dentry *new_dentry )
{
...
}
它在我的 Ubuntu 机器(内核 5.13.0)上运行良好,但在 AWS 节点(内核 5.4.156)上失败,并出现以下错误:
sh-4.2$ sudo ./tracker.py
cannot attach kprobe, probe entry may not exist
Traceback (most recent call last):
File "./tracker.py", line 698, in <module>
bpf = BPF(text=program)
File "/usr/lib/python3.7/site-packages/bcc/__init__.py", line 372, in __init__
self._trace_autoload()
File "/usr/lib/python3.7/site-packages/bcc/__init__.py", line 1232, in _trace_autoload
fn_name=fn.name)
File "/usr/lib/python3.7/site-packages/bcc/__init__.py", line 684, in attach_kprobe
(fn_name, event))
Exception: Failed to attach BPF program b'kprobe__security_path_rename' to kprobe b'security_path_rename'
我检查了一下/proc/kallsyms
,/boot/System.map-$(uname -r)
确实这些符号security_path_{mknod,mkdir,unlink,rename}
都存在于我的机器上,但在 AWS 节点上却不见了。
我还观察到,在将 AWS 内核版本更新到 5.4.176 后,符号出现并且我的程序可以运行。但是,这些符号都出现在所有(相关)内核版本的源代码中,没有标记static
或notrace
通过EXPORT_SYMBOL
.
这些符号不能在内核 5.4.156 上被 kprobed 吗?