diff mbox series

[bpf-next,v2,8/8] bpf: Exercise syscall operations for inode and sk storage

Message ID 20201103153132.2717326-9-kpsingh@chromium.org (mailing list archive)
State Superseded
Delegated to: BPF
Headers show
Series Implement task_local_storage | expand

Commit Message

KP Singh Nov. 3, 2020, 3:31 p.m. UTC
From: KP Singh <kpsingh@google.com>

Signed-off-by: KP Singh <kpsingh@google.com>
---
 .../bpf/prog_tests/test_local_storage.c          | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

Comments

Song Liu Nov. 3, 2020, 10:32 p.m. UTC | #1
> 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
>
KP Singh Nov. 3, 2020, 10:58 p.m. UTC | #2
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 mbox series

Patch

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);
 }