我试图在中检索当前任务的装入命名空间
BPF program
具体如下:
task = (struct task_struct *)bpf_get_current_task();
bpf_probe_read(&nsproxy, sizeof(nsproxy), (void *)&task->nsproxy);
bpf_probe_read(&mnt_ns, sizeof(mnt_ns), (void *)&nsproxy->mnt_ns);
bpf_probe_read(&ns, sizeof(ns), (void *)&mnt_ns->ns);
mnt_ns_inum = ns.inum;
使用Ubuntu内核可以很好地工作(
uname -r
mnt_ns_inum
获取主机装载命名空间中的任务的值4026531840,但使用GCP的内核运行相同的代码(
内核版本
:4.15.0-1019-gcp)始终设置
到0。
我不知道Google可能会改变什么导致这种行为(我正在一个本地VM上测试这个,所以这两种情况之间的唯一区别是我启动VM的内核和用于编译的内核头)。
另外,同样的代码也适用于gcp4.13内核(
内核版本
编辑:
对于4.15 GCP内核,调用
bpf_probe_read
具体如下:
如下面的注释所述,非零返回值对应于
-EFAULT