mirror of
https://github.com/torvalds/linux.git
synced 2026-06-07 22:14:04 +02:00
libbpf: Fix error handling in bpf_map__reuse_fd()
[ Upstream commit d1b4574a4b ]
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
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
77a6a2656c
commit
b3051cd82d
|
|
@ -1073,16 +1073,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;
|
||||
|
|
@ -1101,7 +1107,7 @@ int bpf_map__reuse_fd(struct bpf_map *map, int fd)
|
|||
close(new_fd);
|
||||
err_free_new_name:
|
||||
free(new_name);
|
||||
return -errno;
|
||||
return err;
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user