1

我无法加载使用 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 后,符号出现并且我的程序可以运行。但是,这些符号都出现在所有(相关)内核版本的源代码中,没有标记staticnotrace通过EXPORT_SYMBOL.

这些符号不能在内核 5.4.156 上被 kprobed 吗?

4

0 回答 0