All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH bpf-next 0/2] expand bpf_d_path helper allowlist
@ 2021-07-25 14:18 Hengqi Chen
  2021-07-25 14:18 ` [PATCH bpf-next 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols Hengqi Chen
  2021-07-25 14:18 ` [PATCH bpf-next 2/2] bpf: expose bpf_d_path helper to vfs_* and security_* functions Hengqi Chen
  0 siblings, 2 replies; 12+ messages in thread
From: Hengqi Chen @ 2021-07-25 14:18 UTC (permalink / raw)
  To: bpf
  Cc: ast, daniel, andrii, yhs, john.fastabend, jolsa, yanivagman, hengqi.chen

This patch series adds more functions to bpf_d_path allowlist.

Patch 1 resolves an issue of missing symbols of .BTF_ids.
Patch 2 expands bpf_d_path allowlist.

Changes since v2: [2]
 - Andrii suggested that we should first address an issue of .BTF_ids
   before adding more symbols to .BTF_ids. Fixed that.
 - Yaniv proposed adding security_sb_mount and security_bprm_check.
   Added them.

Changes since v1: [1]
 - Alexei and Yonghong suggested that bpf_d_path helper could also
   apply to vfs_* and security_file_* kernel functions. Added them.

[1] https://lore.kernel.org/bpf/20210712162424.2034006-1-hengqi.chen@gmail.com/
[2] https://lore.kernel.org/bpf/20210719151753.399227-1-hengqi.chen@gmail.com/
[3] https://github.com/iovisor/bcc/issues/3527

Hengqi Chen (2):
  tools/resolve_btfids: emit warnings and patch zero id for missing
    symbols
  bpf: expose bpf_d_path helper to vfs_* and security_* functions

 kernel/trace/bpf_trace.c        | 52 +++++++++++++++++++++++++++++++--
 tools/bpf/resolve_btfids/main.c | 13 +++++----
 2 files changed, 57 insertions(+), 8 deletions(-)

--
2.25.1

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

* [PATCH bpf-next 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols
  2021-07-25 14:18 [PATCH bpf-next 0/2] expand bpf_d_path helper allowlist Hengqi Chen
@ 2021-07-25 14:18 ` Hengqi Chen
  2021-07-26  3:32   ` Yonghong Song
  2021-07-26 20:16   ` Andrii Nakryiko
  2021-07-25 14:18 ` [PATCH bpf-next 2/2] bpf: expose bpf_d_path helper to vfs_* and security_* functions Hengqi Chen
  1 sibling, 2 replies; 12+ messages in thread
From: Hengqi Chen @ 2021-07-25 14:18 UTC (permalink / raw)
  To: bpf
  Cc: ast, daniel, andrii, yhs, john.fastabend, jolsa, yanivagman, hengqi.chen

Kernel functions referenced by .BTF_ids may changed from global to static
and get inlined and thus disappears from BTF. This causes kernel build
failure when resolve_btfids do id patch for symbols in .BTF_ids in vmlinux.
Update resolve_btfids to emit warning messages and patch zero id for missing
symbols instead of aborting kernel build process.

Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
---
 tools/bpf/resolve_btfids/main.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c
index 3ad9301b0f00..3ea19e33250d 100644
--- a/tools/bpf/resolve_btfids/main.c
+++ b/tools/bpf/resolve_btfids/main.c
@@ -291,7 +291,7 @@ static int compressed_section_fix(Elf *elf, Elf_Scn *scn, GElf_Shdr *sh)
 	sh->sh_addralign = expected;

 	if (gelf_update_shdr(scn, sh) == 0) {
-		printf("FAILED cannot update section header: %s\n",
+		pr_err("FAILED cannot update section header: %s\n",
 			elf_errmsg(-1));
 		return -1;
 	}
@@ -317,6 +317,7 @@ static int elf_collect(struct object *obj)

 	elf = elf_begin(fd, ELF_C_RDWR_MMAP, NULL);
 	if (!elf) {
+		close(fd);
 		pr_err("FAILED cannot create ELF descriptor: %s\n",
 			elf_errmsg(-1));
 		return -1;
@@ -484,7 +485,7 @@ static int symbols_resolve(struct object *obj)
 	err = libbpf_get_error(btf);
 	if (err) {
 		pr_err("FAILED: load BTF from %s: %s\n",
-			obj->path, strerror(-err));
+			obj->btf ?: obj->path, strerror(-err));
 		return -1;
 	}

@@ -555,8 +556,7 @@ static int id_patch(struct object *obj, struct btf_id *id)
 	int i;

 	if (!id->id) {
-		pr_err("FAILED unresolved symbol %s\n", id->name);
-		return -EINVAL;
+		pr_err("WARN: unresolved symbol %s\n", id->name);
 	}

 	for (i = 0; i < id->addr_cnt; i++) {
@@ -734,8 +734,9 @@ int main(int argc, const char **argv)

 	err = 0;
 out:
-	if (obj.efile.elf)
+	if (obj.efile.elf) {
 		elf_end(obj.efile.elf);
-	close(obj.efile.fd);
+		close(obj.efile.fd);
+	}
 	return err;
 }
--
2.25.1

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

* [PATCH bpf-next 2/2] bpf: expose bpf_d_path helper to vfs_* and security_* functions
  2021-07-25 14:18 [PATCH bpf-next 0/2] expand bpf_d_path helper allowlist Hengqi Chen
  2021-07-25 14:18 ` [PATCH bpf-next 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols Hengqi Chen
@ 2021-07-25 14:18 ` Hengqi Chen
  2021-07-26  6:20   ` Yonghong Song
  1 sibling, 1 reply; 12+ messages in thread
From: Hengqi Chen @ 2021-07-25 14:18 UTC (permalink / raw)
  To: bpf
  Cc: ast, daniel, andrii, yhs, john.fastabend, jolsa, yanivagman, hengqi.chen

Add vfs_* and security_* to bpf_d_path allowlist, so that we can use
bpf_d_path helper to extract full file path from these functions'
`struct path *` and `struct file *` arguments. This will help tools
like IOVisor's filetop[2]/filelife to get full file path.

Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
---
 kernel/trace/bpf_trace.c | 52 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 50 insertions(+), 2 deletions(-)

diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index c5e0b6a64091..355777b5bf63 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -850,16 +850,64 @@ BPF_CALL_3(bpf_d_path, struct path *, path, char *, buf, u32, sz)
 BTF_SET_START(btf_allowlist_d_path)
 #ifdef CONFIG_SECURITY
 BTF_ID(func, security_file_permission)
-BTF_ID(func, security_inode_getattr)
 BTF_ID(func, security_file_open)
+BTF_ID(func, security_file_ioctl)
+BTF_ID(func, security_file_free)
+BTF_ID(func, security_file_alloc)
+BTF_ID(func, security_file_lock)
+BTF_ID(func, security_file_fcntl)
+BTF_ID(func, security_file_set_fowner)
+BTF_ID(func, security_file_receive)
+BTF_ID(func, security_inode_getattr)
+BTF_ID(func, security_sb_mount)
+BTF_ID(func, security_bprm_check)
 #endif
 #ifdef CONFIG_SECURITY_PATH
 BTF_ID(func, security_path_truncate)
+BTF_ID(func, security_path_notify)
+BTF_ID(func, security_path_unlink)
+BTF_ID(func, security_path_mkdir)
+BTF_ID(func, security_path_rmdir)
+BTF_ID(func, security_path_mknod)
+BTF_ID(func, security_path_symlink)
+BTF_ID(func, security_path_link)
+BTF_ID(func, security_path_rename)
+BTF_ID(func, security_path_chmod)
+BTF_ID(func, security_path_chown)
+BTF_ID(func, security_path_chroot)
 #endif
 BTF_ID(func, vfs_truncate)
 BTF_ID(func, vfs_fallocate)
-BTF_ID(func, dentry_open)
 BTF_ID(func, vfs_getattr)
+BTF_ID(func, vfs_fadvise)
+BTF_ID(func, vfs_fchmod)
+BTF_ID(func, vfs_fchown)
+BTF_ID(func, vfs_open)
+BTF_ID(func, vfs_setpos)
+BTF_ID(func, vfs_llseek)
+BTF_ID(func, vfs_read)
+BTF_ID(func, vfs_write)
+BTF_ID(func, vfs_iocb_iter_read)
+BTF_ID(func, vfs_iter_read)
+BTF_ID(func, vfs_readv)
+BTF_ID(func, vfs_iocb_iter_write)
+BTF_ID(func, vfs_iter_write)
+BTF_ID(func, vfs_writev)
+BTF_ID(func, vfs_copy_file_range)
+BTF_ID(func, vfs_getattr_nosec)
+BTF_ID(func, vfs_ioctl)
+BTF_ID(func, vfs_fsync_range)
+BTF_ID(func, vfs_fsync)
+BTF_ID(func, vfs_utimes)
+BTF_ID(func, vfs_statfs)
+BTF_ID(func, vfs_dedupe_file_range_one)
+BTF_ID(func, vfs_dedupe_file_range)
+BTF_ID(func, vfs_clone_file_range)
+BTF_ID(func, vfs_cancel_lock)
+BTF_ID(func, vfs_test_lock)
+BTF_ID(func, vfs_setlease)
+BTF_ID(func, vfs_lock_file)
+BTF_ID(func, dentry_open)
 BTF_ID(func, filp_close)
 BTF_SET_END(btf_allowlist_d_path)

--
2.25.1

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

* Re: [PATCH bpf-next 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols
  2021-07-25 14:18 ` [PATCH bpf-next 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols Hengqi Chen
@ 2021-07-26  3:32   ` Yonghong Song
  2021-07-26  4:41     ` Hengqi Chen
  2021-07-26 20:16   ` Andrii Nakryiko
  1 sibling, 1 reply; 12+ messages in thread
From: Yonghong Song @ 2021-07-26  3:32 UTC (permalink / raw)
  To: Hengqi Chen, bpf; +Cc: ast, daniel, andrii, john.fastabend, jolsa, yanivagman



On 7/25/21 7:18 AM, Hengqi Chen wrote:
> Kernel functions referenced by .BTF_ids may changed from global to static
> and get inlined and thus disappears from BTF. This causes kernel build

the function could be renamed or removed too.

> failure when resolve_btfids do id patch for symbols in .BTF_ids in vmlinux.
> Update resolve_btfids to emit warning messages and patch zero id for missing
> symbols instead of aborting kernel build process.
> 
> Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>

LGTM with one minor comment below.

Acked-by: Yonghong Song <yhs@fb.com>

> ---
>   tools/bpf/resolve_btfids/main.c | 13 +++++++------
>   1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c
> index 3ad9301b0f00..3ea19e33250d 100644
> --- a/tools/bpf/resolve_btfids/main.c
> +++ b/tools/bpf/resolve_btfids/main.c
> @@ -291,7 +291,7 @@ static int compressed_section_fix(Elf *elf, Elf_Scn *scn, GElf_Shdr *sh)
>   	sh->sh_addralign = expected;
> 
>   	if (gelf_update_shdr(scn, sh) == 0) {
> -		printf("FAILED cannot update section header: %s\n",
> +		pr_err("FAILED cannot update section header: %s\n",
>   			elf_errmsg(-1));
>   		return -1;
>   	}
> @@ -317,6 +317,7 @@ static int elf_collect(struct object *obj)
> 
>   	elf = elf_begin(fd, ELF_C_RDWR_MMAP, NULL);
>   	if (!elf) {
> +		close(fd);
>   		pr_err("FAILED cannot create ELF descriptor: %s\n",
>   			elf_errmsg(-1));
>   		return -1;
> @@ -484,7 +485,7 @@ static int symbols_resolve(struct object *obj)
>   	err = libbpf_get_error(btf);
>   	if (err) {
>   		pr_err("FAILED: load BTF from %s: %s\n",
> -			obj->path, strerror(-err));
> +			obj->btf ?: obj->path, strerror(-err));

Why you change "obj->path" to "obj->btf ?: obj->path"?
Note that obj->path cannot be NULL.

>   		return -1;
>   	}
> 
[...]

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

* Re: [PATCH bpf-next 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols
  2021-07-26  3:32   ` Yonghong Song
@ 2021-07-26  4:41     ` Hengqi Chen
  2021-07-26  4:56       ` Yonghong Song
  0 siblings, 1 reply; 12+ messages in thread
From: Hengqi Chen @ 2021-07-26  4:41 UTC (permalink / raw)
  To: Yonghong Song, bpf; +Cc: ast, daniel, andrii, john.fastabend, jolsa, yanivagman



On 2021/7/26 11:32 AM, Yonghong Song wrote:
> 
> 
> On 7/25/21 7:18 AM, Hengqi Chen wrote:
>> Kernel functions referenced by .BTF_ids may changed from global to static
>> and get inlined and thus disappears from BTF. This causes kernel build
> 
> the function could be renamed or removed too.
> 
>> failure when resolve_btfids do id patch for symbols in .BTF_ids in vmlinux.
>> Update resolve_btfids to emit warning messages and patch zero id for missing
>> symbols instead of aborting kernel build process.
>>
>> Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
> 
> LGTM with one minor comment below.
> 
> Acked-by: Yonghong Song <yhs@fb.com>
> 
>> ---
>>   tools/bpf/resolve_btfids/main.c | 13 +++++++------
>>   1 file changed, 7 insertions(+), 6 deletions(-)
>>
>> diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c
>> index 3ad9301b0f00..3ea19e33250d 100644
>> --- a/tools/bpf/resolve_btfids/main.c
>> +++ b/tools/bpf/resolve_btfids/main.c
>> @@ -291,7 +291,7 @@ static int compressed_section_fix(Elf *elf, Elf_Scn *scn, GElf_Shdr *sh)
>>       sh->sh_addralign = expected;
>>
>>       if (gelf_update_shdr(scn, sh) == 0) {
>> -        printf("FAILED cannot update section header: %s\n",
>> +        pr_err("FAILED cannot update section header: %s\n",
>>               elf_errmsg(-1));
>>           return -1;
>>       }
>> @@ -317,6 +317,7 @@ static int elf_collect(struct object *obj)
>>
>>       elf = elf_begin(fd, ELF_C_RDWR_MMAP, NULL);
>>       if (!elf) {
>> +        close(fd);
>>           pr_err("FAILED cannot create ELF descriptor: %s\n",
>>               elf_errmsg(-1));
>>           return -1;
>> @@ -484,7 +485,7 @@ static int symbols_resolve(struct object *obj)
>>       err = libbpf_get_error(btf);
>>       if (err) {
>>           pr_err("FAILED: load BTF from %s: %s\n",
>> -            obj->path, strerror(-err));
>> +            obj->btf ?: obj->path, strerror(-err));
> 
> Why you change "obj->path" to "obj->btf ?: obj->path"?
> Note that obj->path cannot be NULL.

The diff didn't see the whole picture. Let me quote it here:
```
btf = btf__parse(obj->btf ?: obj->path, NULL);
err = libbpf_get_error(btf);
if (err) {
        pr_err("FAILED: load BTF from %s: %s\n",
                obj->path, strerror(-err));
        return -1;
}
```

Because btf__parse parses either obj->btf or obj->path,
I think the error message should reveal this.

> 
>>           return -1;
>>       }
>>
> [...]

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

* Re: [PATCH bpf-next 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols
  2021-07-26  4:41     ` Hengqi Chen
@ 2021-07-26  4:56       ` Yonghong Song
  2021-07-26  5:22         ` Hengqi Chen
  0 siblings, 1 reply; 12+ messages in thread
From: Yonghong Song @ 2021-07-26  4:56 UTC (permalink / raw)
  To: Hengqi Chen, bpf; +Cc: ast, daniel, andrii, john.fastabend, jolsa, yanivagman



On 7/25/21 9:41 PM, Hengqi Chen wrote:
> 
> 
> On 2021/7/26 11:32 AM, Yonghong Song wrote:
>>
>>
>> On 7/25/21 7:18 AM, Hengqi Chen wrote:
>>> Kernel functions referenced by .BTF_ids may changed from global to static
>>> and get inlined and thus disappears from BTF. This causes kernel build
>>
>> the function could be renamed or removed too.
>>
>>> failure when resolve_btfids do id patch for symbols in .BTF_ids in vmlinux.
>>> Update resolve_btfids to emit warning messages and patch zero id for missing
>>> symbols instead of aborting kernel build process.
>>>
>>> Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
>>
>> LGTM with one minor comment below.
>>
>> Acked-by: Yonghong Song <yhs@fb.com>
>>
>>> ---
>>>    tools/bpf/resolve_btfids/main.c | 13 +++++++------
>>>    1 file changed, 7 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c
>>> index 3ad9301b0f00..3ea19e33250d 100644
>>> --- a/tools/bpf/resolve_btfids/main.c
>>> +++ b/tools/bpf/resolve_btfids/main.c
>>> @@ -291,7 +291,7 @@ static int compressed_section_fix(Elf *elf, Elf_Scn *scn, GElf_Shdr *sh)
>>>        sh->sh_addralign = expected;
>>>
>>>        if (gelf_update_shdr(scn, sh) == 0) {
>>> -        printf("FAILED cannot update section header: %s\n",
>>> +        pr_err("FAILED cannot update section header: %s\n",
>>>                elf_errmsg(-1));
>>>            return -1;
>>>        }
>>> @@ -317,6 +317,7 @@ static int elf_collect(struct object *obj)
>>>
>>>        elf = elf_begin(fd, ELF_C_RDWR_MMAP, NULL);
>>>        if (!elf) {
>>> +        close(fd);
>>>            pr_err("FAILED cannot create ELF descriptor: %s\n",
>>>                elf_errmsg(-1));
>>>            return -1;
>>> @@ -484,7 +485,7 @@ static int symbols_resolve(struct object *obj)
>>>        err = libbpf_get_error(btf);
>>>        if (err) {
>>>            pr_err("FAILED: load BTF from %s: %s\n",
>>> -            obj->path, strerror(-err));
>>> +            obj->btf ?: obj->path, strerror(-err));
>>
>> Why you change "obj->path" to "obj->btf ?: obj->path"?
>> Note that obj->path cannot be NULL.
> 
> The diff didn't see the whole picture. Let me quote it here:
> ```
> btf = btf__parse(obj->btf ?: obj->path, NULL);
> err = libbpf_get_error(btf);
> if (err) {
>          pr_err("FAILED: load BTF from %s: %s\n",
>                  obj->path, strerror(-err));
>          return -1;
> }
> ```
> 
> Because btf__parse parses either obj->btf or obj->path,
> I think the error message should reveal this.

Okay, I see, obj->btf may not be NULL due to
                 OPT_STRING(0, "btf", &obj.btf, "BTF data",
                            "BTF data"),

How about
   obj->btf ? "input BTF data" : obj->path

The error message like
   FAILED: load BTF from : <error msg>
does not sound good.

> 
>>
>>>            return -1;
>>>        }
>>>
>> [...]

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

* Re: [PATCH bpf-next 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols
  2021-07-26  4:56       ` Yonghong Song
@ 2021-07-26  5:22         ` Hengqi Chen
  2021-07-26  5:33           ` Yonghong Song
  0 siblings, 1 reply; 12+ messages in thread
From: Hengqi Chen @ 2021-07-26  5:22 UTC (permalink / raw)
  To: Yonghong Song, bpf; +Cc: ast, daniel, andrii, john.fastabend, jolsa, yanivagman



On 2021/7/26 12:56 PM, Yonghong Song wrote:
> 
> 
> On 7/25/21 9:41 PM, Hengqi Chen wrote:
>>
>>
>> On 2021/7/26 11:32 AM, Yonghong Song wrote:
>>>
>>>
>>> On 7/25/21 7:18 AM, Hengqi Chen wrote:
>>>> Kernel functions referenced by .BTF_ids may changed from global to static
>>>> and get inlined and thus disappears from BTF. This causes kernel build
>>>
>>> the function could be renamed or removed too.
>>>
>>>> failure when resolve_btfids do id patch for symbols in .BTF_ids in vmlinux.
>>>> Update resolve_btfids to emit warning messages and patch zero id for missing
>>>> symbols instead of aborting kernel build process.
>>>>
>>>> Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
>>>
>>> LGTM with one minor comment below.
>>>
>>> Acked-by: Yonghong Song <yhs@fb.com>
>>>
>>>> ---
>>>>    tools/bpf/resolve_btfids/main.c | 13 +++++++------
>>>>    1 file changed, 7 insertions(+), 6 deletions(-)
>>>>
>>>> diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c
>>>> index 3ad9301b0f00..3ea19e33250d 100644
>>>> --- a/tools/bpf/resolve_btfids/main.c
>>>> +++ b/tools/bpf/resolve_btfids/main.c
>>>> @@ -291,7 +291,7 @@ static int compressed_section_fix(Elf *elf, Elf_Scn *scn, GElf_Shdr *sh)
>>>>        sh->sh_addralign = expected;
>>>>
>>>>        if (gelf_update_shdr(scn, sh) == 0) {
>>>> -        printf("FAILED cannot update section header: %s\n",
>>>> +        pr_err("FAILED cannot update section header: %s\n",
>>>>                elf_errmsg(-1));
>>>>            return -1;
>>>>        }
>>>> @@ -317,6 +317,7 @@ static int elf_collect(struct object *obj)
>>>>
>>>>        elf = elf_begin(fd, ELF_C_RDWR_MMAP, NULL);
>>>>        if (!elf) {
>>>> +        close(fd);
>>>>            pr_err("FAILED cannot create ELF descriptor: %s\n",
>>>>                elf_errmsg(-1));
>>>>            return -1;
>>>> @@ -484,7 +485,7 @@ static int symbols_resolve(struct object *obj)
>>>>        err = libbpf_get_error(btf);
>>>>        if (err) {
>>>>            pr_err("FAILED: load BTF from %s: %s\n",
>>>> -            obj->path, strerror(-err));
>>>> +            obj->btf ?: obj->path, strerror(-err));
>>>
>>> Why you change "obj->path" to "obj->btf ?: obj->path"?
>>> Note that obj->path cannot be NULL.
>>
>> The diff didn't see the whole picture. Let me quote it here:
>> ```
>> btf = btf__parse(obj->btf ?: obj->path, NULL);
>> err = libbpf_get_error(btf);
>> if (err) {
>>          pr_err("FAILED: load BTF from %s: %s\n",
>>                  obj->path, strerror(-err));
>>          return -1;
>> }
>> ```
>>
>> Because btf__parse parses either obj->btf or obj->path,
>> I think the error message should reveal this.
> 
> Okay, I see, obj->btf may not be NULL due to
>                 OPT_STRING(0, "btf", &obj.btf, "BTF data",
>                            "BTF data"),
> 
> How about
>   obj->btf ? "input BTF data" : obj->path
> 
> The error message like
>   FAILED: load BTF from : <error msg>
> does not sound good.
> 

Sorry, I am confused.

If obj->btf is set, say, vmlinux.btf, the message should look like:
 FAILED: load BTF from vmlinux.btf: <error msg>

Otherwise, it should look like:
 FAILED: load BTF from vmlinux: <error msg>

Am I missing something ?

>>
>>>
>>>>            return -1;
>>>>        }
>>>>
>>> [...]

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

* Re: [PATCH bpf-next 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols
  2021-07-26  5:22         ` Hengqi Chen
@ 2021-07-26  5:33           ` Yonghong Song
  0 siblings, 0 replies; 12+ messages in thread
From: Yonghong Song @ 2021-07-26  5:33 UTC (permalink / raw)
  To: Hengqi Chen, bpf; +Cc: ast, daniel, andrii, john.fastabend, jolsa, yanivagman



On 7/25/21 10:22 PM, Hengqi Chen wrote:
> 
> 
> On 2021/7/26 12:56 PM, Yonghong Song wrote:
>>
>>
>> On 7/25/21 9:41 PM, Hengqi Chen wrote:
>>>
>>>
>>> On 2021/7/26 11:32 AM, Yonghong Song wrote:
>>>>
>>>>
>>>> On 7/25/21 7:18 AM, Hengqi Chen wrote:
>>>>> Kernel functions referenced by .BTF_ids may changed from global to static
>>>>> and get inlined and thus disappears from BTF. This causes kernel build
>>>>
>>>> the function could be renamed or removed too.
>>>>
>>>>> failure when resolve_btfids do id patch for symbols in .BTF_ids in vmlinux.
>>>>> Update resolve_btfids to emit warning messages and patch zero id for missing
>>>>> symbols instead of aborting kernel build process.
>>>>>
>>>>> Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
>>>>
>>>> LGTM with one minor comment below.
>>>>
>>>> Acked-by: Yonghong Song <yhs@fb.com>
>>>>
>>>>> ---
>>>>>     tools/bpf/resolve_btfids/main.c | 13 +++++++------
>>>>>     1 file changed, 7 insertions(+), 6 deletions(-)
>>>>>
>>>>> diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c
>>>>> index 3ad9301b0f00..3ea19e33250d 100644
>>>>> --- a/tools/bpf/resolve_btfids/main.c
>>>>> +++ b/tools/bpf/resolve_btfids/main.c
>>>>> @@ -291,7 +291,7 @@ static int compressed_section_fix(Elf *elf, Elf_Scn *scn, GElf_Shdr *sh)
>>>>>         sh->sh_addralign = expected;
>>>>>
>>>>>         if (gelf_update_shdr(scn, sh) == 0) {
>>>>> -        printf("FAILED cannot update section header: %s\n",
>>>>> +        pr_err("FAILED cannot update section header: %s\n",
>>>>>                 elf_errmsg(-1));
>>>>>             return -1;
>>>>>         }
>>>>> @@ -317,6 +317,7 @@ static int elf_collect(struct object *obj)
>>>>>
>>>>>         elf = elf_begin(fd, ELF_C_RDWR_MMAP, NULL);
>>>>>         if (!elf) {
>>>>> +        close(fd);
>>>>>             pr_err("FAILED cannot create ELF descriptor: %s\n",
>>>>>                 elf_errmsg(-1));
>>>>>             return -1;
>>>>> @@ -484,7 +485,7 @@ static int symbols_resolve(struct object *obj)
>>>>>         err = libbpf_get_error(btf);
>>>>>         if (err) {
>>>>>             pr_err("FAILED: load BTF from %s: %s\n",
>>>>> -            obj->path, strerror(-err));
>>>>> +            obj->btf ?: obj->path, strerror(-err));
>>>>
>>>> Why you change "obj->path" to "obj->btf ?: obj->path"?
>>>> Note that obj->path cannot be NULL.
>>>
>>> The diff didn't see the whole picture. Let me quote it here:
>>> ```
>>> btf = btf__parse(obj->btf ?: obj->path, NULL);
>>> err = libbpf_get_error(btf);
>>> if (err) {
>>>           pr_err("FAILED: load BTF from %s: %s\n",
>>>                   obj->path, strerror(-err));
>>>           return -1;
>>> }
>>> ```
>>>
>>> Because btf__parse parses either obj->btf or obj->path,
>>> I think the error message should reveal this.
>>
>> Okay, I see, obj->btf may not be NULL due to
>>                  OPT_STRING(0, "btf", &obj.btf, "BTF data",
>>                             "BTF data"),
>>
>> How about
>>    obj->btf ? "input BTF data" : obj->path
>>
>> The error message like
>>    FAILED: load BTF from : <error msg>
>> does not sound good.
>>
> 
> Sorry, I am confused.
> 
> If obj->btf is set, say, vmlinux.btf, the message should look like:
>   FAILED: load BTF from vmlinux.btf: <error msg>
> 
> Otherwise, it should look like:
>   FAILED: load BTF from vmlinux: <error msg>
> 
> Am I missing something ?

Ah, you are right. Your patch looks good. I didn't pay attention
and thought
   OPT_STRING(0, "btf", &obj.btf, "BTF data","BTF data")
is a string input for *btf data*, but actually it is actually
/sys/kernel/btf/vmlinux.

> 
>>>
>>>>
>>>>>             return -1;
>>>>>         }
>>>>>
>>>> [...]

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

* Re: [PATCH bpf-next 2/2] bpf: expose bpf_d_path helper to vfs_* and security_* functions
  2021-07-25 14:18 ` [PATCH bpf-next 2/2] bpf: expose bpf_d_path helper to vfs_* and security_* functions Hengqi Chen
@ 2021-07-26  6:20   ` Yonghong Song
  2021-07-26  7:16     ` Hengqi Chen
  0 siblings, 1 reply; 12+ messages in thread
From: Yonghong Song @ 2021-07-26  6:20 UTC (permalink / raw)
  To: Hengqi Chen, bpf; +Cc: ast, daniel, andrii, john.fastabend, jolsa, yanivagman



On 7/25/21 7:18 AM, Hengqi Chen wrote:
> Add vfs_* and security_* to bpf_d_path allowlist, so that we can use
> bpf_d_path helper to extract full file path from these functions'
> `struct path *` and `struct file *` arguments. This will help tools
> like IOVisor's filetop[2]/filelife to get full file path.

Please use bcc intead of IOVisor.
What is "[2]" in "filetop[2]"?

> 
> Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>

LGTM with minor comments below.

Acked-by: Yonghong Song <yhs@fb.com>

> ---
>   kernel/trace/bpf_trace.c | 52 ++++++++++++++++++++++++++++++++++++++--
>   1 file changed, 50 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
> index c5e0b6a64091..355777b5bf63 100644
> --- a/kernel/trace/bpf_trace.c
> +++ b/kernel/trace/bpf_trace.c
> @@ -850,16 +850,64 @@ BPF_CALL_3(bpf_d_path, struct path *, path, char *, buf, u32, sz)
>   BTF_SET_START(btf_allowlist_d_path)
>   #ifdef CONFIG_SECURITY
>   BTF_ID(func, security_file_permission)
> -BTF_ID(func, security_inode_getattr)
>   BTF_ID(func, security_file_open)
> +BTF_ID(func, security_file_ioctl)
> +BTF_ID(func, security_file_free)
> +BTF_ID(func, security_file_alloc)
> +BTF_ID(func, security_file_lock)
> +BTF_ID(func, security_file_fcntl)
> +BTF_ID(func, security_file_set_fowner)
> +BTF_ID(func, security_file_receive)
> +BTF_ID(func, security_inode_getattr)
> +BTF_ID(func, security_sb_mount)
> +BTF_ID(func, security_bprm_check)

Here and also below "segments" (security_path_* functions, and
later vfs_*/dentry_open/filp_close functions),
maybe you can list functions with increasing alphabet order.
This will make it easy to check whether a particular function
exists or not and whether we miss anything.

There are more security_bprm_* functions, e.g.,
security_bprm_creds_from_file, security_bprm_committing_creds
and security_bprm_committed_creds.
These functions all have "struct linux_binprm *bprm"
parameters. Maybe we can add these few functions as well
in this round.

>   #endif
>   #ifdef CONFIG_SECURITY_PATH
>   BTF_ID(func, security_path_truncate)
> +BTF_ID(func, security_path_notify)
> +BTF_ID(func, security_path_unlink)
> +BTF_ID(func, security_path_mkdir)
> +BTF_ID(func, security_path_rmdir)
> +BTF_ID(func, security_path_mknod)
> +BTF_ID(func, security_path_symlink)
> +BTF_ID(func, security_path_link)
> +BTF_ID(func, security_path_rename)
> +BTF_ID(func, security_path_chmod)
> +BTF_ID(func, security_path_chown)
> +BTF_ID(func, security_path_chroot)
>   #endif
>   BTF_ID(func, vfs_truncate)
>   BTF_ID(func, vfs_fallocate)
> -BTF_ID(func, dentry_open)
>   BTF_ID(func, vfs_getattr)
> +BTF_ID(func, vfs_fadvise)
> +BTF_ID(func, vfs_fchmod)
> +BTF_ID(func, vfs_fchown)
> +BTF_ID(func, vfs_open)
> +BTF_ID(func, vfs_setpos)
> +BTF_ID(func, vfs_llseek)
> +BTF_ID(func, vfs_read)
> +BTF_ID(func, vfs_write)
> +BTF_ID(func, vfs_iocb_iter_read)
> +BTF_ID(func, vfs_iter_read)
> +BTF_ID(func, vfs_readv)
> +BTF_ID(func, vfs_iocb_iter_write)
> +BTF_ID(func, vfs_iter_write)
> +BTF_ID(func, vfs_writev)
> +BTF_ID(func, vfs_copy_file_range)
> +BTF_ID(func, vfs_getattr_nosec)
> +BTF_ID(func, vfs_ioctl)
> +BTF_ID(func, vfs_fsync_range)
> +BTF_ID(func, vfs_fsync)
> +BTF_ID(func, vfs_utimes)
> +BTF_ID(func, vfs_statfs)
> +BTF_ID(func, vfs_dedupe_file_range_one)
> +BTF_ID(func, vfs_dedupe_file_range)
> +BTF_ID(func, vfs_clone_file_range)
> +BTF_ID(func, vfs_cancel_lock)
> +BTF_ID(func, vfs_test_lock)
> +BTF_ID(func, vfs_setlease)
> +BTF_ID(func, vfs_lock_file)

I double checked that for the above three lock
related functions (vfs_cancel_lock, vfs_test_lock,
vfs_lock_file), I double checked d_path
does not use these locks, so we should be fine.

> +BTF_ID(func, dentry_open)
>   BTF_ID(func, filp_close)
>   BTF_SET_END(btf_allowlist_d_path)
> 
> --
> 2.25.1
> 

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

* Re: [PATCH bpf-next 2/2] bpf: expose bpf_d_path helper to vfs_* and security_* functions
  2021-07-26  6:20   ` Yonghong Song
@ 2021-07-26  7:16     ` Hengqi Chen
  0 siblings, 0 replies; 12+ messages in thread
From: Hengqi Chen @ 2021-07-26  7:16 UTC (permalink / raw)
  To: Yonghong Song, bpf; +Cc: ast, daniel, andrii, john.fastabend, jolsa, yanivagman



On 2021/7/26 2:20 PM, Yonghong Song wrote:
> 
> 
> On 7/25/21 7:18 AM, Hengqi Chen wrote:
>> Add vfs_* and security_* to bpf_d_path allowlist, so that we can use
>> bpf_d_path helper to extract full file path from these functions'
>> `struct path *` and `struct file *` arguments. This will help tools
>> like IOVisor's filetop[2]/filelife to get full file path.
> 
> Please use bcc intead of IOVisor.
> What is "[2]" in "filetop[2]"?

OK. Some links are missed in the commit messages 
and version number is not added to subject.

> 
>>
>> Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
> 
> LGTM with minor comments below.
> 
> Acked-by: Yonghong Song <yhs@fb.com>
> 
>> ---
>>   kernel/trace/bpf_trace.c | 52 ++++++++++++++++++++++++++++++++++++++--
>>   1 file changed, 50 insertions(+), 2 deletions(-)
>>
>> diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
>> index c5e0b6a64091..355777b5bf63 100644
>> --- a/kernel/trace/bpf_trace.c
>> +++ b/kernel/trace/bpf_trace.c
>> @@ -850,16 +850,64 @@ BPF_CALL_3(bpf_d_path, struct path *, path, char *, buf, u32, sz)
>>   BTF_SET_START(btf_allowlist_d_path)
>>   #ifdef CONFIG_SECURITY
>>   BTF_ID(func, security_file_permission)
>> -BTF_ID(func, security_inode_getattr)
>>   BTF_ID(func, security_file_open)
>> +BTF_ID(func, security_file_ioctl)
>> +BTF_ID(func, security_file_free)
>> +BTF_ID(func, security_file_alloc)
>> +BTF_ID(func, security_file_lock)
>> +BTF_ID(func, security_file_fcntl)
>> +BTF_ID(func, security_file_set_fowner)
>> +BTF_ID(func, security_file_receive)
>> +BTF_ID(func, security_inode_getattr)
>> +BTF_ID(func, security_sb_mount)
>> +BTF_ID(func, security_bprm_check)
> 
> Here and also below "segments" (security_path_* functions, and
> later vfs_*/dentry_open/filp_close functions),
> maybe you can list functions with increasing alphabet order.
> This will make it easy to check whether a particular function
> exists or not and whether we miss anything.
> 
> There are more security_bprm_* functions, e.g.,
> security_bprm_creds_from_file, security_bprm_committing_creds
> and security_bprm_committed_creds.
> These functions all have "struct linux_binprm *bprm"
> parameters. Maybe we can add these few functions as well
> in this round.
> 

Thanks. Will send a v4 for review.

>>   #endif
>>   #ifdef CONFIG_SECURITY_PATH
>>   BTF_ID(func, security_path_truncate)
>> +BTF_ID(func, security_path_notify)
>> +BTF_ID(func, security_path_unlink)
>> +BTF_ID(func, security_path_mkdir)
>> +BTF_ID(func, security_path_rmdir)
>> +BTF_ID(func, security_path_mknod)
>> +BTF_ID(func, security_path_symlink)
>> +BTF_ID(func, security_path_link)
>> +BTF_ID(func, security_path_rename)
>> +BTF_ID(func, security_path_chmod)
>> +BTF_ID(func, security_path_chown)
>> +BTF_ID(func, security_path_chroot)
>>   #endif
>>   BTF_ID(func, vfs_truncate)
>>   BTF_ID(func, vfs_fallocate)
>> -BTF_ID(func, dentry_open)
>>   BTF_ID(func, vfs_getattr)
>> +BTF_ID(func, vfs_fadvise)
>> +BTF_ID(func, vfs_fchmod)
>> +BTF_ID(func, vfs_fchown)
>> +BTF_ID(func, vfs_open)
>> +BTF_ID(func, vfs_setpos)
>> +BTF_ID(func, vfs_llseek)
>> +BTF_ID(func, vfs_read)
>> +BTF_ID(func, vfs_write)
>> +BTF_ID(func, vfs_iocb_iter_read)
>> +BTF_ID(func, vfs_iter_read)
>> +BTF_ID(func, vfs_readv)
>> +BTF_ID(func, vfs_iocb_iter_write)
>> +BTF_ID(func, vfs_iter_write)
>> +BTF_ID(func, vfs_writev)
>> +BTF_ID(func, vfs_copy_file_range)
>> +BTF_ID(func, vfs_getattr_nosec)
>> +BTF_ID(func, vfs_ioctl)
>> +BTF_ID(func, vfs_fsync_range)
>> +BTF_ID(func, vfs_fsync)
>> +BTF_ID(func, vfs_utimes)
>> +BTF_ID(func, vfs_statfs)
>> +BTF_ID(func, vfs_dedupe_file_range_one)
>> +BTF_ID(func, vfs_dedupe_file_range)
>> +BTF_ID(func, vfs_clone_file_range)
>> +BTF_ID(func, vfs_cancel_lock)
>> +BTF_ID(func, vfs_test_lock)
>> +BTF_ID(func, vfs_setlease)
>> +BTF_ID(func, vfs_lock_file)
> 
> I double checked that for the above three lock
> related functions (vfs_cancel_lock, vfs_test_lock,
> vfs_lock_file), I double checked d_path
> does not use these locks, so we should be fine.
> 
>> +BTF_ID(func, dentry_open)
>>   BTF_ID(func, filp_close)
>>   BTF_SET_END(btf_allowlist_d_path)
>>
>> -- 
>> 2.25.1
>>

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

* Re: [PATCH bpf-next 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols
  2021-07-25 14:18 ` [PATCH bpf-next 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols Hengqi Chen
  2021-07-26  3:32   ` Yonghong Song
@ 2021-07-26 20:16   ` Andrii Nakryiko
  2021-07-27  2:59     ` Hengqi Chen
  1 sibling, 1 reply; 12+ messages in thread
From: Andrii Nakryiko @ 2021-07-26 20:16 UTC (permalink / raw)
  To: Hengqi Chen
  Cc: bpf, Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
	Yonghong Song, john fastabend, Jiri Olsa, Yaniv Agman

On Sun, Jul 25, 2021 at 7:18 AM Hengqi Chen <hengqi.chen@gmail.com> wrote:
>
> Kernel functions referenced by .BTF_ids may changed from global to static
> and get inlined and thus disappears from BTF. This causes kernel build
> failure when resolve_btfids do id patch for symbols in .BTF_ids in vmlinux.
> Update resolve_btfids to emit warning messages and patch zero id for missing
> symbols instead of aborting kernel build process.
>
> Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
> ---
>  tools/bpf/resolve_btfids/main.c | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c
> index 3ad9301b0f00..3ea19e33250d 100644
> --- a/tools/bpf/resolve_btfids/main.c
> +++ b/tools/bpf/resolve_btfids/main.c
> @@ -291,7 +291,7 @@ static int compressed_section_fix(Elf *elf, Elf_Scn *scn, GElf_Shdr *sh)
>         sh->sh_addralign = expected;
>
>         if (gelf_update_shdr(scn, sh) == 0) {
> -               printf("FAILED cannot update section header: %s\n",
> +               pr_err("FAILED cannot update section header: %s\n",
>                         elf_errmsg(-1));
>                 return -1;
>         }
> @@ -317,6 +317,7 @@ static int elf_collect(struct object *obj)
>
>         elf = elf_begin(fd, ELF_C_RDWR_MMAP, NULL);
>         if (!elf) {
> +               close(fd);
>                 pr_err("FAILED cannot create ELF descriptor: %s\n",
>                         elf_errmsg(-1));
>                 return -1;
> @@ -484,7 +485,7 @@ static int symbols_resolve(struct object *obj)
>         err = libbpf_get_error(btf);
>         if (err) {
>                 pr_err("FAILED: load BTF from %s: %s\n",
> -                       obj->path, strerror(-err));
> +                       obj->btf ?: obj->path, strerror(-err));
>                 return -1;
>         }
>
> @@ -555,8 +556,7 @@ static int id_patch(struct object *obj, struct btf_id *id)
>         int i;
>
>         if (!id->id) {
> -               pr_err("FAILED unresolved symbol %s\n", id->name);
> -               return -EINVAL;
> +               pr_err("WARN: unresolved symbol %s\n", id->name);

we should probably give a bit more information for people to get back
to us for this. For starters, maybe prefix the message with
"resolve_btfids:" so that people at least can grep something relevant?

>         }
>
>         for (i = 0; i < id->addr_cnt; i++) {
> @@ -734,8 +734,9 @@ int main(int argc, const char **argv)
>
>         err = 0;
>  out:
> -       if (obj.efile.elf)
> +       if (obj.efile.elf) {
>                 elf_end(obj.efile.elf);
> -       close(obj.efile.fd);
> +               close(obj.efile.fd);
> +       }
>         return err;
>  }
> --
> 2.25.1

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

* Re: [PATCH bpf-next 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols
  2021-07-26 20:16   ` Andrii Nakryiko
@ 2021-07-27  2:59     ` Hengqi Chen
  0 siblings, 0 replies; 12+ messages in thread
From: Hengqi Chen @ 2021-07-27  2:59 UTC (permalink / raw)
  To: Andrii Nakryiko
  Cc: bpf, Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
	Yonghong Song, john fastabend, Jiri Olsa, Yaniv Agman



On 2021/7/27 4:16 AM, Andrii Nakryiko wrote:
> On Sun, Jul 25, 2021 at 7:18 AM Hengqi Chen <hengqi.chen@gmail.com> wrote:
>>
>> Kernel functions referenced by .BTF_ids may changed from global to static
>> and get inlined and thus disappears from BTF. This causes kernel build
>> failure when resolve_btfids do id patch for symbols in .BTF_ids in vmlinux.
>> Update resolve_btfids to emit warning messages and patch zero id for missing
>> symbols instead of aborting kernel build process.
>>
>> Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
>> ---
>>  tools/bpf/resolve_btfids/main.c | 13 +++++++------
>>  1 file changed, 7 insertions(+), 6 deletions(-)
>>
>> diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c
>> index 3ad9301b0f00..3ea19e33250d 100644
>> --- a/tools/bpf/resolve_btfids/main.c
>> +++ b/tools/bpf/resolve_btfids/main.c
>> @@ -291,7 +291,7 @@ static int compressed_section_fix(Elf *elf, Elf_Scn *scn, GElf_Shdr *sh)
>>         sh->sh_addralign = expected;
>>
>>         if (gelf_update_shdr(scn, sh) == 0) {
>> -               printf("FAILED cannot update section header: %s\n",
>> +               pr_err("FAILED cannot update section header: %s\n",
>>                         elf_errmsg(-1));
>>                 return -1;
>>         }
>> @@ -317,6 +317,7 @@ static int elf_collect(struct object *obj)
>>
>>         elf = elf_begin(fd, ELF_C_RDWR_MMAP, NULL);
>>         if (!elf) {
>> +               close(fd);
>>                 pr_err("FAILED cannot create ELF descriptor: %s\n",
>>                         elf_errmsg(-1));
>>                 return -1;
>> @@ -484,7 +485,7 @@ static int symbols_resolve(struct object *obj)
>>         err = libbpf_get_error(btf);
>>         if (err) {
>>                 pr_err("FAILED: load BTF from %s: %s\n",
>> -                       obj->path, strerror(-err));
>> +                       obj->btf ?: obj->path, strerror(-err));
>>                 return -1;
>>         }
>>
>> @@ -555,8 +556,7 @@ static int id_patch(struct object *obj, struct btf_id *id)
>>         int i;
>>
>>         if (!id->id) {
>> -               pr_err("FAILED unresolved symbol %s\n", id->name);
>> -               return -EINVAL;
>> +               pr_err("WARN: unresolved symbol %s\n", id->name);
> 
> we should probably give a bit more information for people to get back
> to us for this. For starters, maybe prefix the message with
> "resolve_btfids:" so that people at least can grep something relevant?
> 

OK, will do.

>>         }
>>
>>         for (i = 0; i < id->addr_cnt; i++) {
>> @@ -734,8 +734,9 @@ int main(int argc, const char **argv)
>>
>>         err = 0;
>>  out:
>> -       if (obj.efile.elf)
>> +       if (obj.efile.elf) {
>>                 elf_end(obj.efile.elf);
>> -       close(obj.efile.fd);
>> +               close(obj.efile.fd);
>> +       }
>>         return err;
>>  }
>> --
>> 2.25.1

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

end of thread, other threads:[~2021-07-27  2:59 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-25 14:18 [PATCH bpf-next 0/2] expand bpf_d_path helper allowlist Hengqi Chen
2021-07-25 14:18 ` [PATCH bpf-next 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols Hengqi Chen
2021-07-26  3:32   ` Yonghong Song
2021-07-26  4:41     ` Hengqi Chen
2021-07-26  4:56       ` Yonghong Song
2021-07-26  5:22         ` Hengqi Chen
2021-07-26  5:33           ` Yonghong Song
2021-07-26 20:16   ` Andrii Nakryiko
2021-07-27  2:59     ` Hengqi Chen
2021-07-25 14:18 ` [PATCH bpf-next 2/2] bpf: expose bpf_d_path helper to vfs_* and security_* functions Hengqi Chen
2021-07-26  6:20   ` Yonghong Song
2021-07-26  7:16     ` Hengqi Chen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.