mirror of
https://github.com/netdata/libbpf.git
synced 2026-03-21 00:39:07 +08:00
libbpf: Ensure FD >= 3 during bpf_map__reuse_fd()
Improve bpf_map__reuse_fd() logic and ensure that dup'ed map FD is "good" (>= 3) and has O_CLOEXEC flags. Use fcntl(F_DUPFD_CLOEXEC) for that, similarly to ensure_good_fd() helper we already use in low-level APIs that work with bpf() syscall. Suggested-by: Lennart Poettering <lennart@poettering.net> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Link: https://lore.kernel.org/bpf/20230525221311.2136408-2-andrii@kernel.org
This commit is contained in:
committed by
Andrii Nakryiko
parent
ba7a44da68
commit
fa1a18d38b
13
src/libbpf.c
13
src/libbpf.c
@@ -4414,18 +4414,17 @@ int bpf_map__reuse_fd(struct bpf_map *map, int fd)
|
||||
if (!new_name)
|
||||
return libbpf_err(-errno);
|
||||
|
||||
new_fd = open("/", O_RDONLY | O_CLOEXEC);
|
||||
/*
|
||||
* Like dup(), but make sure new FD is >= 3 and has O_CLOEXEC set.
|
||||
* This is similar to what we do in ensure_good_fd(), but without
|
||||
* closing original FD.
|
||||
*/
|
||||
new_fd = fcntl(fd, F_DUPFD_CLOEXEC, 3);
|
||||
if (new_fd < 0) {
|
||||
err = -errno;
|
||||
goto err_free_new_name;
|
||||
}
|
||||
|
||||
new_fd = dup3(fd, new_fd, O_CLOEXEC);
|
||||
if (new_fd < 0) {
|
||||
err = -errno;
|
||||
goto err_close_new_fd;
|
||||
}
|
||||
|
||||
err = zclose(map->fd);
|
||||
if (err) {
|
||||
err = -errno;
|
||||
|
||||
Reference in New Issue
Block a user