diff mbox series

selftests/memfd: fix a memleak

Message ID 20231115054503.10403-1-zhujun2@cmss.chinamobile.com (mailing list archive)
State New
Headers show
Series selftests/memfd: fix a memleak | expand

Commit Message

Zhu Jun Nov. 15, 2023, 5:45 a.m. UTC
The memory allocated within a function should be released
before the function return,otherwise memleak will occur.

Signed-off-by: zhujun2 <zhujun2@cmss.chinamobile.com>
---
 tools/testing/selftests/memfd/fuse_test.c  |  3 +++
 tools/testing/selftests/memfd/memfd_test.c | 10 ++++++++++
 2 files changed, 13 insertions(+)

Comments

Mathieu Desnoyers Nov. 15, 2023, 3:37 p.m. UTC | #1
On 2023-11-15 00:45, zhujun2 wrote:
> The memory allocated within a function should be released
> before the function return,otherwise memleak will occur.

[...]

> --- a/tools/testing/selftests/memfd/fuse_test.c
> +++ b/tools/testing/selftests/memfd/fuse_test.c
> @@ -205,6 +205,7 @@ static pid_t spawn_sealing_thread(void)
>   	stack = malloc(STACK_SIZE);
>   	if (!stack) {
>   		printf("malloc(STACK_SIZE) failed: %m\n");
> +		free(stack);
>   		abort();

Freeing process memory immediately before an abort(3) seems rather
pointless, because the whole process is going away anyway. It's like
tidying up your house right before it is scheduled to be bulldozed
away to make room for a new highway. :-)

Thanks,

Mathieu
diff mbox series

Patch

diff --git a/tools/testing/selftests/memfd/fuse_test.c b/tools/testing/selftests/memfd/fuse_test.c
index 93798c8c5d54..f302294a9001 100644
--- a/tools/testing/selftests/memfd/fuse_test.c
+++ b/tools/testing/selftests/memfd/fuse_test.c
@@ -205,6 +205,7 @@  static pid_t spawn_sealing_thread(void)
 	stack = malloc(STACK_SIZE);
 	if (!stack) {
 		printf("malloc(STACK_SIZE) failed: %m\n");
+		free(stack);
 		abort();
 	}
 
@@ -214,9 +215,11 @@  static pid_t spawn_sealing_thread(void)
 		    NULL);
 	if (pid < 0) {
 		printf("clone() failed: %m\n");
+		free(stack);
 		abort();
 	}
 
+	free(stack);
 	return pid;
 }
 
diff --git a/tools/testing/selftests/memfd/memfd_test.c b/tools/testing/selftests/memfd/memfd_test.c
index 3df008677239..917ffc210723 100644
--- a/tools/testing/selftests/memfd/memfd_test.c
+++ b/tools/testing/selftests/memfd/memfd_test.c
@@ -658,15 +658,18 @@  static void mfd_assert_grow_write(int fd)
 	buf = malloc(mfd_def_size * 8);
 	if (!buf) {
 		printf("malloc(%zu) failed: %m\n", mfd_def_size * 8);
+		free(buf);
 		abort();
 	}
 
 	l = pwrite(fd, buf, mfd_def_size * 8, 0);
 	if (l != (mfd_def_size * 8)) {
 		printf("pwrite() failed: %m\n");
+		free(buf);
 		abort();
 	}
 
+	free(buf);
 	mfd_assert_size(fd, mfd_def_size * 8);
 }
 
@@ -682,14 +685,18 @@  static void mfd_fail_grow_write(int fd)
 	buf = malloc(mfd_def_size * 8);
 	if (!buf) {
 		printf("malloc(%zu) failed: %m\n", mfd_def_size * 8);
+		free(buf);
 		abort();
 	}
 
 	l = pwrite(fd, buf, mfd_def_size * 8, 0);
 	if (l == (mfd_def_size * 8)) {
 		printf("pwrite() didn't fail as expected\n");
+		free(buf);
 		abort();
 	}
+
+	free(buf);
 }
 
 static void mfd_assert_mode(int fd, int mode)
@@ -771,15 +778,18 @@  static pid_t spawn_thread(unsigned int flags, int (*fn)(void *), void *arg)
 	stack = malloc(STACK_SIZE);
 	if (!stack) {
 		printf("malloc(STACK_SIZE) failed: %m\n");
+		free(stack);
 		abort();
 	}
 
 	pid = clone(fn, stack + STACK_SIZE, SIGCHLD | flags, arg);
 	if (pid < 0) {
 		printf("clone() failed: %m\n");
+		free(stack);
 		abort();
 	}
 
+	free(stack);
 	return pid;
 }