JournaleBPF

Noyau 7.0 : des tracepoints qui ne remontent plus rien

Sur Ubuntu 26.04, 50 chmod ont produit 0 événement côté tracepoint. Si vous écrivez des outils eBPF, voici comment le vérifier et ce qu'on a changé.

À retenir+

  • Sur noyau 7.0, certains tracepoints d'appels système ne reçoivent rien.
  • Les kprobes sur les mêmes appels fonctionnent.
  • Seul un test sur un vrai noyau le montre, pas un test synthétique.

Le symptôme

Sur une machine virtuelle Ubuntu 26.04.1, noyau 7.0.0-38, les tests eBPF en direct d'Hermian ont échoué 10 fois sur 10. Les exécutions avec LD_PRELOAD, les chmod qui posent un bit setuid et les setcap n'étaient plus vus.

Le vérifier vous-même

Dans un premier terminal, comptez les événements reçus par le tracepoint :

bpftrace -e 'tracepoint:syscalls:sys_enter_fchmodat { @[comm] = count(); }'

Dans un second, lancez quelques chmod, puis arrêtez bpftrace avec Ctrl+C. Sur notre machine, 50 chmod ont donné 0 événement. Le problème touchait les appels système qui prennent une chaîne de caractères en argument, avant même que notre code soit appelé.

Ce qu'on a changé

Les neuf appels système concernés sont maintenant suivis par des kprobes, avec le tracepoint en secours (#105). Sur la même machine : 10 passages sur 10. Sur un hôte de test sous Ubuntu 24.04, les neuf passent par les kprobes, aucun par le secours.

La CI lance désormais les tests eBPF en direct sur les noyaux 7.0, 6.8 et 6.8 arm64, parce qu'un test synthétique ne dit pas si la collecte fonctionne sur un vrai noyau.