Как я могу получить пространство имен монтирования текущей задачи в программе BPF, используя ядро ​​GCP 4.15? - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь получить пространство имен монтирования текущей задачи в BPF-программе следующим образом:

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 получает значение 4026531840 для задач в пространстве имен монтирования хоста, но при запуске одного и того же кода с использованием ядра GCP (uname -r: 4.15.0-1019-gcp) всегда устанавливается mnt_ns_inum в0.

Я в недоумении относительно того, что Google мог изменить, чтобы вызвать такое поведение (я тестирую это на локальной виртуальной машине, поэтому единственное различие между этими двумя случаями заключается в ядре, с которого я загрузил виртуальную машинуи заголовки ядра, используемые для компиляции).

Кроме того, этот же код работал для ядра GCP 4.13 (uname -r: 4.13.0-1008-gcp), поэтому кажется, что это недавнее изменение.

РЕДАКТИРОВАНИЕ:

Для ядра 4.15 GCP возвращаемые значения для вызовов к bpf_probe_read следующие:

  • 0
  • 18446744073709551602
  • 18446744073709551602

Как указано вВ комментариях ниже ненулевые возвращаемые значения соответствуют -EFAULT.

...