selftests/x86/lam: Fix clean up fds in do_uring() and allocate_dsa_pasid()
authorMalaya Kumar Rout <malayarout91@gmail.com>
Wed, 9 Apr 2025 13:53:37 +0000 (19:23 +0530)
committerIngo Molnar <mingo@kernel.org>
Wed, 9 Apr 2025 19:30:37 +0000 (21:30 +0200)
Resolve minor fd leaks reported by cppcheck in lam.c.

Specifically, the 'file_fd' and 'fd' were not closed in do_uring()
and allocate_dsa_pasid() functions, respectively.

cppcheck output before this patch:

  tools/testing/selftests/x86/lam.c:685:3: error: Resource leak: file_fd [resourceLeak]
  tools/testing/selftests/x86/lam.c:693:3: error: Resource leak: file_fd [resourceLeak]
  tools/testing/selftests/x86/lam.c:1195:2: error: Resource leak: fd [resourceLeak]

cppcheck output after this patch:

  No resource leaks found

While this is a standalone test tool that doesn't really leak anything
in practice, as exit() cleans it up all, clean up resources nevertheless.

[ mingo: Updated the changelog. ]

Signed-off-by: Malaya Kumar Rout <malayarout91@gmail.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20250409135341.28987-1-malayarout91@gmail.com
tools/testing/selftests/x86/lam.c

index 18d736640ece42447c05288ffd91d8057ff80699..0873b0e5f48b3d13e3a98683e1a378355e277dcf 100644 (file)
@@ -682,7 +682,7 @@ int do_uring(unsigned long lam)
                return 1;
 
        if (fstat(file_fd, &st) < 0)
-               return 1;
+               goto cleanup;
 
        off_t file_sz = st.st_size;
 
@@ -690,7 +690,7 @@ int do_uring(unsigned long lam)
 
        fi = malloc(sizeof(*fi) + sizeof(struct iovec) * blocks);
        if (!fi)
-               return 1;
+               goto cleanup;
 
        fi->file_sz = file_sz;
        fi->file_fd = file_fd;
@@ -698,7 +698,7 @@ int do_uring(unsigned long lam)
        ring = malloc(sizeof(*ring));
        if (!ring) {
                free(fi);
-               return 1;
+               goto cleanup;
        }
 
        memset(ring, 0, sizeof(struct io_ring));
@@ -729,6 +729,8 @@ out:
        }
 
        free(fi);
+cleanup:
+       close(file_fd);
 
        return ret;
 }
@@ -1189,6 +1191,7 @@ void *allocate_dsa_pasid(void)
 
        wq = mmap(NULL, 0x1000, PROT_WRITE,
                           MAP_SHARED | MAP_POPULATE, fd, 0);
+       close(fd);
        if (wq == MAP_FAILED)
                perror("mmap");