Release memory before exception branch returns to prevent memory leaks.

Signed-off-by: liuye <li...@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;
+       }
 
        /* Wait until the parent modified it. */
        write(comm_pipes->child_ready[1], "0", 1);
-- 
2.25.1


Reply via email to