netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH bpf] libbpf: Prevent overriding errno when logging errors
@ 2020-08-13 14:29 Toke Høiland-Jørgensen
  2020-08-13 16:41 ` Andrii Nakryiko
  0 siblings, 1 reply; 5+ messages in thread
From: Toke Høiland-Jørgensen @ 2020-08-13 14:29 UTC (permalink / raw)
  To: Alexei Starovoitov, Daniel Borkmann
  Cc: Toke Høiland-Jørgensen, netdev, bpf

Turns out there were a few more instances where libbpf didn't save the
errno before writing an error message, causing errno to be overridden by
the printf() return and the error disappearing if logging is enabled.

Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
---
 tools/lib/bpf/libbpf.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 0a06124f7999..fd256440e233 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -3478,10 +3478,11 @@ bpf_object__probe_global_data(struct bpf_object *obj)
 
 	map = bpf_create_map_xattr(&map_attr);
 	if (map < 0) {
-		cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));
+		ret = -errno;
+		cp = libbpf_strerror_r(-ret, errmsg, sizeof(errmsg));
 		pr_warn("Error in %s():%s(%d). Couldn't create simple array map.\n",
-			__func__, cp, errno);
-		return -errno;
+			__func__, cp, -ret);
+		return ret;
 	}
 
 	insns[0].imm = map;
@@ -6012,9 +6013,10 @@ int bpf_program__pin_instance(struct bpf_program *prog, const char *path,
 	}
 
 	if (bpf_obj_pin(prog->instances.fds[instance], path)) {
-		cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));
+		err = -errno;
+		cp = libbpf_strerror_r(-err, errmsg, sizeof(errmsg));
 		pr_warn("failed to pin program: %s\n", cp);
-		return -errno;
+		return err;
 	}
 	pr_debug("pinned program '%s'\n", path);
 
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH bpf] libbpf: Prevent overriding errno when logging errors
  2020-08-13 14:29 [PATCH bpf] libbpf: Prevent overriding errno when logging errors Toke Høiland-Jørgensen
@ 2020-08-13 16:41 ` Andrii Nakryiko
  2020-08-13 19:52   ` Toke Høiland-Jørgensen
  0 siblings, 1 reply; 5+ messages in thread
From: Andrii Nakryiko @ 2020-08-13 16:41 UTC (permalink / raw)
  To: Toke Høiland-Jørgensen
  Cc: Alexei Starovoitov, Daniel Borkmann, Networking, bpf

On Thu, Aug 13, 2020 at 7:29 AM Toke Høiland-Jørgensen <toke@redhat.com> wrote:
>
> Turns out there were a few more instances where libbpf didn't save the
> errno before writing an error message, causing errno to be overridden by
> the printf() return and the error disappearing if logging is enabled.
>
> Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
> ---

Acked-by: Andrii Nakryiko <andriin@fb.com>

>  tools/lib/bpf/libbpf.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
> index 0a06124f7999..fd256440e233 100644
> --- a/tools/lib/bpf/libbpf.c
> +++ b/tools/lib/bpf/libbpf.c
> @@ -3478,10 +3478,11 @@ bpf_object__probe_global_data(struct bpf_object *obj)
>
>         map = bpf_create_map_xattr(&map_attr);
>         if (map < 0) {
> -               cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));
> +               ret = -errno;
> +               cp = libbpf_strerror_r(-ret, errmsg, sizeof(errmsg));

fyi, libbpf_strerror_r() is smart enough to work with both negative
and positive error numbers (it basically takes abs(err)), so no need
to ensure it's positive here and below.

>                 pr_warn("Error in %s():%s(%d). Couldn't create simple array map.\n",
> -                       __func__, cp, errno);
> -               return -errno;
> +                       __func__, cp, -ret);
> +               return ret;
>         }
>
>         insns[0].imm = map;
> @@ -6012,9 +6013,10 @@ int bpf_program__pin_instance(struct bpf_program *prog, const char *path,
>         }
>
>         if (bpf_obj_pin(prog->instances.fds[instance], path)) {
> -               cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));
> +               err = -errno;
> +               cp = libbpf_strerror_r(-err, errmsg, sizeof(errmsg));
>                 pr_warn("failed to pin program: %s\n", cp);
> -               return -errno;
> +               return err;
>         }
>         pr_debug("pinned program '%s'\n", path);
>
> --
> 2.28.0
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH bpf] libbpf: Prevent overriding errno when logging errors
  2020-08-13 16:41 ` Andrii Nakryiko
@ 2020-08-13 19:52   ` Toke Høiland-Jørgensen
  2020-08-13 20:35     ` Daniel Borkmann
  0 siblings, 1 reply; 5+ messages in thread
From: Toke Høiland-Jørgensen @ 2020-08-13 19:52 UTC (permalink / raw)
  To: Andrii Nakryiko; +Cc: Alexei Starovoitov, Daniel Borkmann, Networking, bpf

Andrii Nakryiko <andrii.nakryiko@gmail.com> writes:

> On Thu, Aug 13, 2020 at 7:29 AM Toke Høiland-Jørgensen <toke@redhat.com> wrote:
>>
>> Turns out there were a few more instances where libbpf didn't save the
>> errno before writing an error message, causing errno to be overridden by
>> the printf() return and the error disappearing if logging is enabled.
>>
>> Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
>> ---
>
> Acked-by: Andrii Nakryiko <andriin@fb.com>
>
>>  tools/lib/bpf/libbpf.c | 12 +++++++-----
>>  1 file changed, 7 insertions(+), 5 deletions(-)
>>
>> diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
>> index 0a06124f7999..fd256440e233 100644
>> --- a/tools/lib/bpf/libbpf.c
>> +++ b/tools/lib/bpf/libbpf.c
>> @@ -3478,10 +3478,11 @@ bpf_object__probe_global_data(struct bpf_object *obj)
>>
>>         map = bpf_create_map_xattr(&map_attr);
>>         if (map < 0) {
>> -               cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));
>> +               ret = -errno;
>> +               cp = libbpf_strerror_r(-ret, errmsg, sizeof(errmsg));
>
> fyi, libbpf_strerror_r() is smart enough to work with both negative
> and positive error numbers (it basically takes abs(err)), so no need
> to ensure it's positive here and below.

Noted. Although that also means it doesn't hurt either, I suppose; so
not going to bother respinning this unless someone insists :)

-Toke


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH bpf] libbpf: Prevent overriding errno when logging errors
  2020-08-13 19:52   ` Toke Høiland-Jørgensen
@ 2020-08-13 20:35     ` Daniel Borkmann
  2020-08-13 20:52       ` Toke Høiland-Jørgensen
  0 siblings, 1 reply; 5+ messages in thread
From: Daniel Borkmann @ 2020-08-13 20:35 UTC (permalink / raw)
  To: Toke Høiland-Jørgensen, Andrii Nakryiko
  Cc: Alexei Starovoitov, Networking, bpf

On 8/13/20 9:52 PM, Toke Høiland-Jørgensen wrote:
> Andrii Nakryiko <andrii.nakryiko@gmail.com> writes:
>> On Thu, Aug 13, 2020 at 7:29 AM Toke Høiland-Jørgensen <toke@redhat.com> wrote:
>>>
>>> Turns out there were a few more instances where libbpf didn't save the
>>> errno before writing an error message, causing errno to be overridden by
>>> the printf() return and the error disappearing if logging is enabled.
>>>
>>> Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
>>> ---
>>
>> Acked-by: Andrii Nakryiko <andriin@fb.com>
>>
>>>   tools/lib/bpf/libbpf.c | 12 +++++++-----
>>>   1 file changed, 7 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
>>> index 0a06124f7999..fd256440e233 100644
>>> --- a/tools/lib/bpf/libbpf.c
>>> +++ b/tools/lib/bpf/libbpf.c
>>> @@ -3478,10 +3478,11 @@ bpf_object__probe_global_data(struct bpf_object *obj)
>>>
>>>          map = bpf_create_map_xattr(&map_attr);
>>>          if (map < 0) {
>>> -               cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));
>>> +               ret = -errno;
>>> +               cp = libbpf_strerror_r(-ret, errmsg, sizeof(errmsg));
>>
>> fyi, libbpf_strerror_r() is smart enough to work with both negative
>> and positive error numbers (it basically takes abs(err)), so no need
>> to ensure it's positive here and below.
> 
> Noted. Although that also means it doesn't hurt either, I suppose; so
> not going to bother respinning this unless someone insists :)

Fixed up while applying, thanks!

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH bpf] libbpf: Prevent overriding errno when logging errors
  2020-08-13 20:35     ` Daniel Borkmann
@ 2020-08-13 20:52       ` Toke Høiland-Jørgensen
  0 siblings, 0 replies; 5+ messages in thread
From: Toke Høiland-Jørgensen @ 2020-08-13 20:52 UTC (permalink / raw)
  To: Daniel Borkmann, Andrii Nakryiko; +Cc: Alexei Starovoitov, Networking, bpf

Daniel Borkmann <daniel@iogearbox.net> writes:

> On 8/13/20 9:52 PM, Toke Høiland-Jørgensen wrote:
>> Andrii Nakryiko <andrii.nakryiko@gmail.com> writes:
>>> On Thu, Aug 13, 2020 at 7:29 AM Toke Høiland-Jørgensen <toke@redhat.com> wrote:
>>>>
>>>> Turns out there were a few more instances where libbpf didn't save the
>>>> errno before writing an error message, causing errno to be overridden by
>>>> the printf() return and the error disappearing if logging is enabled.
>>>>
>>>> Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
>>>> ---
>>>
>>> Acked-by: Andrii Nakryiko <andriin@fb.com>
>>>
>>>>   tools/lib/bpf/libbpf.c | 12 +++++++-----
>>>>   1 file changed, 7 insertions(+), 5 deletions(-)
>>>>
>>>> diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
>>>> index 0a06124f7999..fd256440e233 100644
>>>> --- a/tools/lib/bpf/libbpf.c
>>>> +++ b/tools/lib/bpf/libbpf.c
>>>> @@ -3478,10 +3478,11 @@ bpf_object__probe_global_data(struct bpf_object *obj)
>>>>
>>>>          map = bpf_create_map_xattr(&map_attr);
>>>>          if (map < 0) {
>>>> -               cp = libbpf_strerror_r(errno, errmsg, sizeof(errmsg));
>>>> +               ret = -errno;
>>>> +               cp = libbpf_strerror_r(-ret, errmsg, sizeof(errmsg));
>>>
>>> fyi, libbpf_strerror_r() is smart enough to work with both negative
>>> and positive error numbers (it basically takes abs(err)), so no need
>>> to ensure it's positive here and below.
>> 
>> Noted. Although that also means it doesn't hurt either, I suppose; so
>> not going to bother respinning this unless someone insists :)
>
> Fixed up while applying, thanks!

Great, thanks!

-Toke


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-08-13 20:52 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-13 14:29 [PATCH bpf] libbpf: Prevent overriding errno when logging errors Toke Høiland-Jørgensen
2020-08-13 16:41 ` Andrii Nakryiko
2020-08-13 19:52   ` Toke Høiland-Jørgensen
2020-08-13 20:35     ` Daniel Borkmann
2020-08-13 20:52       ` Toke Høiland-Jørgensen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).