eBPF probe attach fails on io_uring kfunc in kernel 5.15+

Posté par nath06 le 06/12/2025
RÉSOLU

nath06

Membre depuis le 24/03/2019

actif

salut la team ! on a un souci avec nos probes eBPF depuis qu'on a bumpé nos kernels à 5.15+. avant sur 5.10 ça marchait niquel on tracait les io_uring_submit_sqes. maintenant la probe attache mais ne collecte rien ou crash le kernel parfois. on utilise kprobe/kretprobe. vous avez eu des trucs similaires ?

SEC("kprobe/io_uring_submit_sqes")
int BPF_KPROBE(io_uring_submit_sqes_entry)
{
    // some BPF logic here
    return 0;
}

Commentaires

susanne79

Membre depuis le 08/10/2019

secouriste

uhm 5.15 a pas mal changé comment certains kfuncs sont exportés ou gérés surtout autour d'io_uring regarde la changelog si y a des symboles qui ont bougé ou été renommés

nath06

Membre depuis le 24/03/2019

actif

j'ai regardé vite fait pas de renommage explicite pour cette fct. j'ai essayé de lister avec bpftool kfunc et la fct est bien là

susanne79

Membre depuis le 08/10/2019

secouriste

ok mais est-ce que sa signature a changé ptete le nombre de params ou leurs types un truc tout bête mais ça casse tout

nath06

Membre depuis le 24/03/2019

actif

bonne question je vais fouiller dans le source. mais avant j'utilisais kprobe ça s'en foutait un peu de la signature non ?

susanne79

Membre depuis le 08/10/2019

secouriste

pas totalement si c'est une kprobe ça hook l'entrée mais si le kernel attend des registres différents pour les args ça peut foirer l'accès au contexte et si t'utilises BPF_KPROBE c'est sensible à la signature

nath06

Membre depuis le 24/03/2019

actif

ah d'acc. je regarde ça.

susanne79

Membre depuis le 08/10/2019

secouriste

autre truc les helpers bpf genre bpf_get_current_pid_tgid ça marche toujours bien ? juste pour isoler si le pb vient de io_uring ou du hook général

nath06

Membre depuis le 24/03/2019

actif

oui les helpers génériques ça va. c'est vraiment spécifique à cette fct ou d'autres liées à io_uring.

susanne79

Membre depuis le 08/10/2019

secouriste

tu as essayé avec tracefs pour voir si le hook est enregistré mais ne trigge pas ou s'il y a des erreurs dans les logs du kernel genre dmesg

nath06

Membre depuis le 24/03/2019

actif

dmesg rien d'explicite. tracefs je vois la probe active mais les événements sont vides. pas de hit

susanne79

Membre depuis le 08/10/2019

secouriste

ok. alors ça sent le changement ABI du kfunc. dans 5.15 y a eu des refactorings sur io_uring pour la performance et la sécurité interne

nath06

Membre depuis le 24/03/2019

actif

donc faut que je retrouve la *nouvelle* signature ? ou utiliser des tracepoints si dispo ?

susanne79

Membre depuis le 08/10/2019

secouriste

tracepoints c'est plus stable mais y en a pas toujours pour tout. si la signature a changé et que tu forces BPF_KPROBE sur l'ancienne ça peut attacher mais juste pas parser les args correctement et donc rien collecter

nath06

Membre depuis le 24/03/2019

actif

y a aussi eu des changements sur la politique de compilation du kernel vis-à-vis des modules non-gpl et des symboles exportés t'es sur que ton programme bpf est bien chargé ?

susanne79

Membre depuis le 08/10/2019

secouriste

c'est un programme eBPF pas un module kernel. mais oui la politique de symboles peut impacter. si le kfunc n'est plus EXPORT_SYMBOL_GPL ça peut être un souci avec certains bpf helpers

nath06

Membre depuis le 24/03/2019

actif

je viens de trouver ! ils ont introduit une nouvelle macro io_uring_submit_sqes_kernel_entry. le nom a changé implicitement pour les kprobes. j'ai modifié mon code et ça fonctionne

nath06

Membre depuis le 24/03/2019

actif

putain de refactorings silencieux. merci beaucoup pour l'aide

susanne79

Membre depuis le 08/10/2019

secouriste

haha classique. content que ça marche. ces trucs là c'est un enfer à débugger.

nath06

Membre depuis le 24/03/2019

actif

clairement. thx encore.

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire