summaryrefslogtreecommitdiffstats
path: root/tools/lib
diff options
context:
space:
mode:
authorAndrii Nakryiko <andriin@fb.com>2019-05-29 13:36:04 -0400
committerDaniel Borkmann <daniel@iogearbox.net>2019-05-29 19:23:34 -0400
commitbe5c5d4e9d8cbdd7fcdcbc45e86e34bc0bd1cefd (patch)
tree792ac7428a29e496e2ce8f5622e81570fa89872d /tools/lib
parent8ca990ce0d402d5aaf05f7a33ff025fcbcbb5f93 (diff)
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 <songliubraving@fb.com> Signed-off-by: Andrii Nakryiko <andriin@fb.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'tools/lib')
-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)
565 } else { 565 } else {
566 obj->efile.fd = open(obj->path, O_RDONLY); 566 obj->efile.fd = open(obj->path, O_RDONLY);
567 if (obj->efile.fd < 0) { 567 if (obj->efile.fd < 0) {
568 char errmsg[STRERR_BUFSIZE]; 568 char errmsg[STRERR_BUFSIZE], *cp;
569 char *cp = libbpf_strerror_r(errno, errmsg,
570 sizeof(errmsg));
571 569
570 err = -errno;
571 cp = libbpf_strerror_r(err, errmsg, sizeof(errmsg));
572 pr_warning("failed to open %s: %s\n", obj->path, cp); 572 pr_warning("failed to open %s: %s\n", obj->path, cp);
573 return -errno; 573 return err;
574 } 574 }
575 575
576 obj->efile.elf = elf_begin(obj->efile.fd, 576 obj->efile.elf = elf_begin(obj->efile.fd,