You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
bpf: Fix issue with bpf preload module taking over stdout/stdin of kernel.
In a previous commit (1), BPF preload process was switched from user mode
process to use in-kernel light skeleton instead. However, in the kernel context
the available FD starts from 0, instead of normally 3 for user mode process.
The preload process also left two FDs open, taking over FD 0 and 1. This later
caused issues when kernel trys to setup stdin/stdout/stderr for init process,
assuming FD 0,1,2 are available.
As seen here:
Before fix:
ls -lah /proc/1/fd/*
lrwx------1 root root 64 Feb 23 17:20 /proc/1/fd/0 -> /dev/null
lrwx------ 1 root root 64 Feb 23 17:20 /proc/1/fd/1 -> /dev/null
lrwx------ 1 root root 64 Feb 23 17:20 /proc/1/fd/2 -> /dev/console
lrwx------ 1 root root 64 Feb 23 17:20 /proc/1/fd/6 -> /dev/console
lrwx------ 1 root root 64 Feb 23 17:20 /proc/1/fd/7 -> /dev/console
After Fix / Normal:
ls -lah /proc/1/fd/*
lrwx------ 1 root root 64 Feb 24 21:23 /proc/1/fd/0 -> /dev/console
lrwx------ 1 root root 64 Feb 24 21:23 /proc/1/fd/1 -> /dev/console
lrwx------ 1 root root 64 Feb 24 21:23 /proc/1/fd/2 -> /dev/console
In this patch:
- skel_closenz was changed to skel_closegez to correctly handle
FD=0 case.
- various places detecting FD > 0 was changed to FD >= 0.
- Call iterators_skel__detach() funciton to release FDs after links
are obtained.
1: commit cb80ddc ("bpf: Convert bpf_preload.ko to use light skeleton.")
Fixes: commit cb80ddc ("bpf: Convert bpf_preload.ko to use light skeleton.")
Signed-off-by: Yucong Sun <[email protected]>
V3 -> V1: removed all changes related to handle fd=0.
V2 -> V1: rename skel_closenez to skel_closegez, added comment as
requested.
0 commit comments