Message ID | 20201103153132.2717326-9-kpsingh@chromium.org (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | BPF |
Headers | show |
Series | Implement task_local_storage | expand |
> On Nov 3, 2020, at 7:31 AM, KP Singh <kpsingh@chromium.org> wrote: > > From: KP Singh <kpsingh@google.com> A short commit log would be great... > > Signed-off-by: KP Singh <kpsingh@google.com> > --- > .../bpf/prog_tests/test_local_storage.c | 16 +++++++++++++++- > 1 file changed, 15 insertions(+), 1 deletion(-) > > diff --git a/tools/testing/selftests/bpf/prog_tests/test_local_storage.c b/tools/testing/selftests/bpf/prog_tests/test_local_storage.c > index feba23f8848b..2e64baabb50d 100644 > --- a/tools/testing/selftests/bpf/prog_tests/test_local_storage.c > +++ b/tools/testing/selftests/bpf/prog_tests/test_local_storage.c > @@ -145,7 +145,7 @@ bool check_syscall_operations(int map_fd, int obj_fd) > void test_test_local_storage(void) > { > char tmp_exec_path[PATH_MAX] = "/tmp/copy_of_rmXXXXXX"; > - int err, serv_sk = -1, task_fd = -1; > + int err, serv_sk = -1, task_fd = -1, rm_fd = -1; > struct local_storage *skel = NULL; > > skel = local_storage__open_and_load(); > @@ -169,6 +169,15 @@ void test_test_local_storage(void) > if (CHECK(err < 0, "copy_rm", "err %d errno %d\n", err, errno)) > goto close_prog; > > + rm_fd = open(tmp_exec_path, O_RDONLY); > + if (CHECK(rm_fd < 0, "open", "failed to open %s err:%d, errno:%d", > + tmp_exec_path, rm_fd, errno)) > + goto close_prog; > + > + if (!check_syscall_operations(bpf_map__fd(skel->maps.inode_storage_map), > + rm_fd)) > + goto close_prog; > + > /* Sets skel->bss->monitored_pid to the pid of the forked child > * forks a child process that executes tmp_exec_path and tries to > * unlink its executable. This operation should be denied by the loaded > @@ -197,9 +206,14 @@ void test_test_local_storage(void) > CHECK(skel->data->sk_storage_result != 0, "sk_storage_result", > "sk_local_storage not set\n"); > > + if (!check_syscall_operations(bpf_map__fd(skel->maps.sk_storage_map), > + serv_sk)) > + goto close_prog; We shouldn't need this goto, otherwise we may leak serv_sk. > + > close(serv_sk); > > close_prog: > + close(rm_fd); > close(task_fd); > local_storage__destroy(skel); > } > -- > 2.29.1.341.ge80a0c044ae-goog >
On Tue, Nov 3, 2020 at 11:32 PM Song Liu <songliubraving@fb.com> wrote: > > > > > On Nov 3, 2020, at 7:31 AM, KP Singh <kpsingh@chromium.org> wrote: > > > > From: KP Singh <kpsingh@google.com> > > A short commit log would be great... Sure :) No excuses for not having one, will add it in the next revision. - KP [...] > > + serv_sk)) > > + goto close_prog; > > We shouldn't need this goto, otherwise we may leak serv_sk. Good point, I will just move the close(serv_sk); along with the other descriptor clean up. > > > + > > close(serv_sk); > > > > close_prog: > > + close(rm_fd); > > close(task_fd); > > local_storage__destroy(skel); > > } > > -- > > 2.29.1.341.ge80a0c044ae-goog > > >
diff --git a/tools/testing/selftests/bpf/prog_tests/test_local_storage.c b/tools/testing/selftests/bpf/prog_tests/test_local_storage.c index feba23f8848b..2e64baabb50d 100644 --- a/tools/testing/selftests/bpf/prog_tests/test_local_storage.c +++ b/tools/testing/selftests/bpf/prog_tests/test_local_storage.c @@ -145,7 +145,7 @@ bool check_syscall_operations(int map_fd, int obj_fd) void test_test_local_storage(void) { char tmp_exec_path[PATH_MAX] = "/tmp/copy_of_rmXXXXXX"; - int err, serv_sk = -1, task_fd = -1; + int err, serv_sk = -1, task_fd = -1, rm_fd = -1; struct local_storage *skel = NULL; skel = local_storage__open_and_load(); @@ -169,6 +169,15 @@ void test_test_local_storage(void) if (CHECK(err < 0, "copy_rm", "err %d errno %d\n", err, errno)) goto close_prog; + rm_fd = open(tmp_exec_path, O_RDONLY); + if (CHECK(rm_fd < 0, "open", "failed to open %s err:%d, errno:%d", + tmp_exec_path, rm_fd, errno)) + goto close_prog; + + if (!check_syscall_operations(bpf_map__fd(skel->maps.inode_storage_map), + rm_fd)) + goto close_prog; + /* Sets skel->bss->monitored_pid to the pid of the forked child * forks a child process that executes tmp_exec_path and tries to * unlink its executable. This operation should be denied by the loaded @@ -197,9 +206,14 @@ void test_test_local_storage(void) CHECK(skel->data->sk_storage_result != 0, "sk_storage_result", "sk_local_storage not set\n"); + if (!check_syscall_operations(bpf_map__fd(skel->maps.sk_storage_map), + serv_sk)) + goto close_prog; + close(serv_sk); close_prog: + close(rm_fd); close(task_fd); local_storage__destroy(skel); }