如何使用GCP的4.15内核在BPF程序中检索当前任务的安装命名空间?

时间:2018-09-29 12:56:54

标签: linux linux-kernel google-cloud-platform kernel bpf

我试图在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:4.15.0-13-generic)可以很好地工作,并且mnt_ns_inum可以为主机的mount命名空间中的任务获取值4026531840,但可以使用GCP的相同代码运行内核(uname -r:4.15.0-1019-gcp)始终将mnt_ns_inum设置为0。

我对Google可能更改为导致此行为的内容不知所措(我正在本地VM上进行测试,因此这两种情况之间的唯一区别是启动了VM的内核和使用的内核标头进行编译。)

此外,该代码同样适用于GCP 4.13内核(uname -r:4.13.0-1008-gcp),因此看来这是最近的更改。

编辑:

对于4.15 GCP内核,对bpf_probe_read的调用的返回值如下:

  • 0
  • 18446744073709551602
  • 18446744073709551602

如以下评论中所述,非零返回值对应于-EFAULT

0 个答案:

没有答案