diff mbox series

selftests/mm/cow : Fix memory leak in child_vmsplice_memcmp_fn()

Message ID 20250114022929.46364-1-liuye@kylinos.cn (mailing list archive)
State New
Headers show
Series selftests/mm/cow : Fix memory leak in child_vmsplice_memcmp_fn() | expand

Commit Message

liuye Jan. 14, 2025, 2:29 a.m. UTC
Release memory before exception branch returns to prevent memory leaks.

Signed-off-by: liuye <liuye@kylinos.cn>
---
 tools/testing/selftests/mm/cow.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

Comments

David Hildenbrand Jan. 14, 2025, 10:23 a.m. UTC | #1
On 14.01.25 03:29, liuye wrote:
>      Release memory before exception branch returns to prevent memory leaks.
> 
> Signed-off-by: liuye <liuye@kylinos.cn>
> ---
>   tools/testing/selftests/mm/cow.c | 21 ++++++++++++++++-----
>   1 file changed, 16 insertions(+), 5 deletions(-)
> 
> diff --git a/tools/testing/selftests/mm/cow.c b/tools/testing/selftests/mm/cow.c
> index 1238e1c5aae1..959327ba6258 100644
> --- a/tools/testing/selftests/mm/cow.c
> +++ b/tools/testing/selftests/mm/cow.c
> @@ -167,19 +167,30 @@ static int child_vmsplice_memcmp_fn(char *mem, size_t size,
>   	/* Backup the original content. */
>   	memcpy(old, mem, size);
>   
> -	if (pipe(fds) < 0)
> +	if (pipe(fds) < 0) {
> +		free(old);
> +		free(new);
>   		return -errno;
> -
> +	}
>   	/* Trigger a read-only pin. */
>   	transferred = vmsplice(fds[1], &iov, 1, 0);
> -	if (transferred < 0)
> +	if (transferred < 0) {
> +		free(old);
> +		free(new);
>   		return -errno;
> -	if (transferred == 0)
> +	}
> +	if (transferred == 0) {
> +		free(old);
> +		free(new);
>   		return -EINVAL;
> +	}
>   
>   	/* Unmap it from our page tables. */
> -	if (munmap(mem, size) < 0)
> +	if (munmap(mem, size) < 0) {
> +		free(old);
> +		free(new);
>   		return -errno;
> +	}

We are immediately exiting the test in do_test_cow_in_parent()
	exit(fn(mem, size, &comm_pipes));

Your changes make the code unnecessarily more complicated to read, so 
I'm not in favor of this one to make some checker tool happy.
diff mbox series

Patch

diff --git a/tools/testing/selftests/mm/cow.c b/tools/testing/selftests/mm/cow.c
index 1238e1c5aae1..959327ba6258 100644
--- a/tools/testing/selftests/mm/cow.c
+++ b/tools/testing/selftests/mm/cow.c
@@ -167,19 +167,30 @@  static int child_vmsplice_memcmp_fn(char *mem, size_t size,
 	/* Backup the original content. */
 	memcpy(old, mem, size);
 
-	if (pipe(fds) < 0)
+	if (pipe(fds) < 0) {
+		free(old);
+		free(new);
 		return -errno;
-
+	}
 	/* Trigger a read-only pin. */
 	transferred = vmsplice(fds[1], &iov, 1, 0);
-	if (transferred < 0)
+	if (transferred < 0) {
+		free(old);
+		free(new);
 		return -errno;
-	if (transferred == 0)
+	}
+	if (transferred == 0) {
+		free(old);
+		free(new);
 		return -EINVAL;
+	}
 
 	/* Unmap it from our page tables. */
-	if (munmap(mem, size) < 0)
+	if (munmap(mem, size) < 0) {
+		free(old);
+		free(new);
 		return -errno;
+	}
 
 	/* Wait until the parent modified it. */
 	write(comm_pipes->child_ready[1], "0", 1);