* [PATCH bpf-next v4 0/2] bpf: expand bpf_d_path helper allowlist
@ 2021-07-26 14:10 Hengqi Chen
2021-07-26 14:10 ` [PATCH bpf-next v4 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols Hengqi Chen
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Hengqi Chen @ 2021-07-26 14:10 UTC (permalink / raw)
To: bpf
Cc: ast, daniel, andrii, yhs, john.fastabend, jolsa, yanivagman,
hengqi.chen
This patch set adds more functions to bpf_d_path allowlist.
Patch 1 is prep work which updates resolve_btfids to emit warnings
on missing symbols instead of aborting kernel build process.
Patch 2 expands bpf_d_path allowlist.
Changes since v3: [3]
- Addressed Yonghong's comments. Sort allowlist and add security_bprm_*
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://lore.kernel.org/bpf/20210725141814.2000828-3-hengqi.chen@gmail.com/
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 | 60 ++++++++++++++++++++++++++++++---
tools/bpf/resolve_btfids/main.c | 13 +++----
2 files changed, 63 insertions(+), 10 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH bpf-next v4 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols
2021-07-26 14:10 [PATCH bpf-next v4 0/2] bpf: expand bpf_d_path helper allowlist Hengqi Chen
@ 2021-07-26 14:10 ` Hengqi Chen
2021-07-26 14:10 ` [PATCH bpf-next v4 2/2] bpf: expose bpf_d_path helper to vfs_* and security_* functions Hengqi Chen
2021-07-29 21:44 ` [PATCH bpf-next v4 0/2] bpf: expand bpf_d_path helper allowlist Andrii Nakryiko
2 siblings, 0 replies; 4+ messages in thread
From: Hengqi Chen @ 2021-07-26 14:10 UTC (permalink / raw)
To: bpf
Cc: ast, daniel, andrii, yhs, john.fastabend, jolsa, yanivagman,
hengqi.chen
Kernel functions referenced by .BTF_ids may be changed from global to static
and get inlined or get renamed/removed, 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.
Suggested-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Yonghong Song <yhs@fb.com>
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] 4+ messages in thread
* [PATCH bpf-next v4 2/2] bpf: expose bpf_d_path helper to vfs_* and security_* functions
2021-07-26 14:10 [PATCH bpf-next v4 0/2] bpf: expand bpf_d_path helper allowlist Hengqi Chen
2021-07-26 14:10 ` [PATCH bpf-next v4 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols Hengqi Chen
@ 2021-07-26 14:10 ` Hengqi Chen
2021-07-29 21:44 ` [PATCH bpf-next v4 0/2] bpf: expand bpf_d_path helper allowlist Andrii Nakryiko
2 siblings, 0 replies; 4+ messages in thread
From: Hengqi Chen @ 2021-07-26 14:10 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' arguments.
This will help tools like BCC's filetop[1]/filelife to get full file path.
[1] https://github.com/iovisor/bcc/issues/3527
Acked-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
---
kernel/trace/bpf_trace.c | 60 +++++++++++++++++++++++++++++++++++++---
1 file changed, 56 insertions(+), 4 deletions(-)
diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index c5e0b6a64091..e7b24abcf3bf 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -849,18 +849,70 @@ 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_bprm_check)
+BTF_ID(func, security_bprm_committed_creds)
+BTF_ID(func, security_bprm_committing_creds)
+BTF_ID(func, security_bprm_creds_for_exec)
+BTF_ID(func, security_bprm_creds_from_file)
+BTF_ID(func, security_file_alloc)
+BTF_ID(func, security_file_fcntl)
+BTF_ID(func, security_file_free)
+BTF_ID(func, security_file_ioctl)
+BTF_ID(func, security_file_lock)
+BTF_ID(func, security_file_open)
BTF_ID(func, security_file_permission)
+BTF_ID(func, security_file_receive)
+BTF_ID(func, security_file_set_fowner)
BTF_ID(func, security_inode_getattr)
-BTF_ID(func, security_file_open)
+BTF_ID(func, security_sb_mount)
#endif
#ifdef CONFIG_SECURITY_PATH
+BTF_ID(func, security_path_chmod)
+BTF_ID(func, security_path_chown)
+BTF_ID(func, security_path_chroot)
+BTF_ID(func, security_path_link)
+BTF_ID(func, security_path_mkdir)
+BTF_ID(func, security_path_mknod)
+BTF_ID(func, security_path_notify)
+BTF_ID(func, security_path_rename)
+BTF_ID(func, security_path_rmdir)
+BTF_ID(func, security_path_symlink)
BTF_ID(func, security_path_truncate)
+BTF_ID(func, security_path_unlink)
#endif
-BTF_ID(func, vfs_truncate)
-BTF_ID(func, vfs_fallocate)
BTF_ID(func, dentry_open)
-BTF_ID(func, vfs_getattr)
BTF_ID(func, filp_close)
+BTF_ID(func, vfs_cancel_lock)
+BTF_ID(func, vfs_clone_file_range)
+BTF_ID(func, vfs_copy_file_range)
+BTF_ID(func, vfs_dedupe_file_range)
+BTF_ID(func, vfs_dedupe_file_range_one)
+BTF_ID(func, vfs_fadvise)
+BTF_ID(func, vfs_fallocate)
+BTF_ID(func, vfs_fchmod)
+BTF_ID(func, vfs_fchown)
+BTF_ID(func, vfs_fsync)
+BTF_ID(func, vfs_fsync_range)
+BTF_ID(func, vfs_getattr)
+BTF_ID(func, vfs_getattr_nosec)
+BTF_ID(func, vfs_iocb_iter_read)
+BTF_ID(func, vfs_iocb_iter_write)
+BTF_ID(func, vfs_ioctl)
+BTF_ID(func, vfs_iter_read)
+BTF_ID(func, vfs_iter_write)
+BTF_ID(func, vfs_llseek)
+BTF_ID(func, vfs_lock_file)
+BTF_ID(func, vfs_open)
+BTF_ID(func, vfs_read)
+BTF_ID(func, vfs_readv)
+BTF_ID(func, vfs_setlease)
+BTF_ID(func, vfs_setpos)
+BTF_ID(func, vfs_statfs)
+BTF_ID(func, vfs_test_lock)
+BTF_ID(func, vfs_truncate)
+BTF_ID(func, vfs_utimes)
+BTF_ID(func, vfs_write)
+BTF_ID(func, vfs_writev)
BTF_SET_END(btf_allowlist_d_path)
static bool bpf_d_path_allowed(const struct bpf_prog *prog)
--
2.25.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH bpf-next v4 0/2] bpf: expand bpf_d_path helper allowlist
2021-07-26 14:10 [PATCH bpf-next v4 0/2] bpf: expand bpf_d_path helper allowlist Hengqi Chen
2021-07-26 14:10 ` [PATCH bpf-next v4 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols Hengqi Chen
2021-07-26 14:10 ` [PATCH bpf-next v4 2/2] bpf: expose bpf_d_path helper to vfs_* and security_* functions Hengqi Chen
@ 2021-07-29 21:44 ` Andrii Nakryiko
2 siblings, 0 replies; 4+ messages in thread
From: Andrii Nakryiko @ 2021-07-29 21:44 UTC (permalink / raw)
To: Hengqi Chen
Cc: bpf, Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Yonghong Song, john fastabend, Jiri Olsa, Yaniv Agman
On Mon, Jul 26, 2021 at 7:10 AM Hengqi Chen <hengqi.chen@gmail.com> wrote:
>
> This patch set adds more functions to bpf_d_path allowlist.
>
> Patch 1 is prep work which updates resolve_btfids to emit warnings
> on missing symbols instead of aborting kernel build process.
>
> Patch 2 expands bpf_d_path allowlist.
>
> Changes since v3: [3]
> - Addressed Yonghong's comments. Sort allowlist and add security_bprm_*
>
> 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://lore.kernel.org/bpf/20210725141814.2000828-3-hengqi.chen@gmail.com/
>
I've applied the first patch to bpf-next. I'd like some more eyes on
patch #2, so I'm leaving it up for review by others for a bit longer.
> 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 | 60 ++++++++++++++++++++++++++++++---
> tools/bpf/resolve_btfids/main.c | 13 +++----
> 2 files changed, 63 insertions(+), 10 deletions(-)
>
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-07-29 21:45 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-07-26 14:10 [PATCH bpf-next v4 0/2] bpf: expand bpf_d_path helper allowlist Hengqi Chen
2021-07-26 14:10 ` [PATCH bpf-next v4 1/2] tools/resolve_btfids: emit warnings and patch zero id for missing symbols Hengqi Chen
2021-07-26 14:10 ` [PATCH bpf-next v4 2/2] bpf: expose bpf_d_path helper to vfs_* and security_* functions Hengqi Chen
2021-07-29 21:44 ` [PATCH bpf-next v4 0/2] bpf: expand bpf_d_path helper allowlist Andrii Nakryiko
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).