On Wed, Oct 27, 2021 at 11:35 PM Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> wrote: > > Add a simple wrapper for passing an fd and getting a new one >= 3 if it > is one of 0, 1, or 2. There are two primary reasons to make this change: > First, libbpf relies on the assumption a certain BPF fd is never 0 (e.g. > most recently noticed in [0]). Second, Alexei pointed out in [1] that > some environments reset stdin, stdout, and stderr if they notice an > invalid fd at these numbers. To protect against both these cases, switch > all internal BPF syscall wrappers in libbpf to always return an fd >= 3. > We only need to modify the syscall wrappers and not other code that > assumes a valid fd by doing >= 0, to avoid pointless churn, and because > it is still a valid assumption. The cost paid is two additional syscalls > if fd is in range [0, 2]. > > [0]: e31eec77e4ab ("bpf: selftests: Fix fd cleanup in get_branch_snapshot") > [1]: https://lore.kernel.org/bpf/CAADnVQKVKY8o_3aU8Gzke443+uHa-eGoM0h7W4srChMXU1S4Bg@xxxxxxxxxxxxxx > > Acked-by: Song Liu <songliubraving@xxxxxx> > Signed-off-by: Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> > --- LGTM, thanks. Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > tools/lib/bpf/bpf.c | 35 +++++++++++++++++++++------------ > tools/lib/bpf/libbpf_internal.h | 24 ++++++++++++++++++++++ > 2 files changed, 46 insertions(+), 13 deletions(-) > [...]