mirror of
https://github.com/netdata/libbpf.git
synced 2026-03-20 16:29:07 +08:00
libbpf: Fix error handling in bpf_map__reuse_fd()
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: Toke Høiland-Jørgensen <toke@redhat.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Andrii Nakryiko <andriin@fb.com> Link: https://lore.kernel.org/bpf/157269297769.394725.12634985106772698611.stgit@toke.dk
This commit is contained in:
committed by
Andrii Nakryiko
parent
15de8ad80d
commit
fe4cb796df
14
src/libbpf.c
14
src/libbpf.c
@@ -1917,16 +1917,22 @@ int bpf_map__reuse_fd(struct bpf_map *map, int fd)
|
||||
return -errno;
|
||||
|
||||
new_fd = open("/", O_RDONLY | O_CLOEXEC);
|
||||
if (new_fd < 0)
|
||||
if (new_fd < 0) {
|
||||
err = -errno;
|
||||
goto err_free_new_name;
|
||||
}
|
||||
|
||||
new_fd = dup3(fd, new_fd, O_CLOEXEC);
|
||||
if (new_fd < 0)
|
||||
if (new_fd < 0) {
|
||||
err = -errno;
|
||||
goto err_close_new_fd;
|
||||
}
|
||||
|
||||
err = zclose(map->fd);
|
||||
if (err)
|
||||
if (err) {
|
||||
err = -errno;
|
||||
goto err_close_new_fd;
|
||||
}
|
||||
free(map->name);
|
||||
|
||||
map->fd = new_fd;
|
||||
@@ -1945,7 +1951,7 @@ err_close_new_fd:
|
||||
close(new_fd);
|
||||
err_free_new_name:
|
||||
free(new_name);
|
||||
return -errno;
|
||||
return err;
|
||||
}
|
||||
|
||||
int bpf_map__resize(struct bpf_map *map, __u32 max_entries)
|
||||
|
||||
Reference in New Issue
Block a user