提交 f34bb9e5 编写于 作者: T Toke Høiland-Jørgensen 提交者: Yang Yingliang

libbpf: Fix error handling in bpf_map__reuse_fd()

[ Upstream commit d1b4574a4b86565325ef2e545eda8dfc9aa07c60 ]

bpf_map__reuse_fd() was calling close() in the error path before returning
an error value based on errno. However, close can change errno, so that can
lead to potentially misleading error messages. Instead, explicitly store
errno in the err variable before each goto.
Signed-off-by: NToke Høiland-Jørgensen <toke@redhat.com>
Signed-off-by: NAlexei Starovoitov <ast@kernel.org>
Acked-by: NAndrii Nakryiko <andriin@fb.com>
Link: https://lore.kernel.org/bpf/157269297769.394725.12634985106772698611.stgit@toke.dkSigned-off-by: NSasha Levin <sashal@kernel.org>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 16d59ad2
...@@ -1073,16 +1073,22 @@ int bpf_map__reuse_fd(struct bpf_map *map, int fd) ...@@ -1073,16 +1073,22 @@ int bpf_map__reuse_fd(struct bpf_map *map, int fd)
return -errno; return -errno;
new_fd = open("/", O_RDONLY | O_CLOEXEC); new_fd = open("/", O_RDONLY | O_CLOEXEC);
if (new_fd < 0) if (new_fd < 0) {
err = -errno;
goto err_free_new_name; goto err_free_new_name;
}
new_fd = dup3(fd, new_fd, O_CLOEXEC); new_fd = dup3(fd, new_fd, O_CLOEXEC);
if (new_fd < 0) if (new_fd < 0) {
err = -errno;
goto err_close_new_fd; goto err_close_new_fd;
}
err = zclose(map->fd); err = zclose(map->fd);
if (err) if (err) {
err = -errno;
goto err_close_new_fd; goto err_close_new_fd;
}
free(map->name); free(map->name);
map->fd = new_fd; map->fd = new_fd;
...@@ -1101,7 +1107,7 @@ int bpf_map__reuse_fd(struct bpf_map *map, int fd) ...@@ -1101,7 +1107,7 @@ int bpf_map__reuse_fd(struct bpf_map *map, int fd)
close(new_fd); close(new_fd);
err_free_new_name: err_free_new_name:
free(new_name); free(new_name);
return -errno; return err;
} }
static int static int
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册