代码之家  ›  专栏  ›  技术社区  ›  dippynark

如何使用GCP的4.15内核检索BPF程序中当前任务的挂载名称空间?

  •  1
  • dippynark  · 技术社区  · 6 年前

    我试图在中检索当前任务的装入命名空间 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 具体如下:

    • 0
    • 18446744073709551602

    如下面的注释所述,非零返回值对应于 -EFAULT

    0 回复  |  直到 6 年前