53 lines
1.6 KiB
Diff
53 lines
1.6 KiB
Diff
From fa1a18d38bfb77207b0a3137e211a706fd8487f4 Mon Sep 17 00:00:00 2001
|
|
From: Andrii Nakryiko <andrii@kernel.org>
|
|
Date: Thu, 25 May 2023 15:13:11 -0700
|
|
Subject: [PATCH] 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.
|
|
|
|
Conflict: NA
|
|
Reference:https://github.com/libbpf/libbpf/commit/fa1a18d38bfb77207b0a3137e211a706fd8487f4
|
|
|
|
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
|
|
---
|
|
src/libbpf.c | 13 ++++++-------
|
|
1 file changed, 6 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/src/libbpf.c b/src/libbpf.c
|
|
index 60ef4c5e3..47632606b 100644
|
|
--- a/src/libbpf.c
|
|
+++ b/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;
|
|
--
|
|
2.23.0
|