aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lib/bpf/libbpf.c
diff options
context:
space:
mode:
authorAndrii Nakryiko <[email protected]>2019-05-29 17:36:04 +0000
committerDaniel Borkmann <[email protected]>2019-05-29 23:23:34 +0000
commitbe5c5d4e9d8cbdd7fcdcbc45e86e34bc0bd1cefd (patch)
tree792ac7428a29e496e2ce8f5622e81570fa89872d /tools/lib/bpf/libbpf.c
parentlibbpf: fix detection of corrupted BPF instructions section (diff)
downloadkernel-be5c5d4e9d8cbdd7fcdcbc45e86e34bc0bd1cefd.tar.gz
kernel-be5c5d4e9d8cbdd7fcdcbc45e86e34bc0bd1cefd.zip
libbpf: preserve errno before calling into user callback
pr_warning ultimately may call into user-provided callback function, which can clobber errno value, so we need to save it before that. Acked-by: Song Liu <[email protected]> Signed-off-by: Andrii Nakryiko <[email protected]> Signed-off-by: Daniel Borkmann <[email protected]>
Diffstat (limited to 'tools/lib/bpf/libbpf.c')
-rw-r--r--tools/lib/bpf/libbpf.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index c985a7916e35..40690b7e500e 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -565,12 +565,12 @@ static int bpf_object__elf_init(struct bpf_object *obj)
} else {
obj->efile.fd = open(obj->path, O_RDONLY);
if (obj->efile.fd < 0) {
- char errmsg[STRERR_BUFSIZE];
- char *cp = libbpf_strerror_r(errno, errmsg,
- sizeof(errmsg));
+ char errmsg[STRERR_BUFSIZE], *cp;
+ err = -errno;
+ cp = libbpf_strerror_r(err, errmsg, sizeof(errmsg));
pr_warning("failed to open %s: %s\n", obj->path, cp);
- return -errno;
+ return err;
}
obj->efile.elf = elf_begin(obj->efile.fd,