]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests/mm/vm_util: robust write_file()
authorChunyu Hu <chuhu@redhat.com>
Thu, 2 Apr 2026 01:45:41 +0000 (09:45 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Sat, 18 Apr 2026 07:10:54 +0000 (00:10 -0700)
Add three more checks for buflen and numwritten.  The buflen should be at
least two, that means at least one char and the null-end.  The error case
check is added by checking numwriten < 0 instead of numwritten < 1.  And
the truncate case is checked.  The test will exit if any of these
conditions aren't met.

Additionally, add more print information when a write failure occurs or a
truncated write happens, providing clearer diagnostics.

Link: https://lore.kernel.org/20260402014543.1671131-5-chuhu@redhat.com
Signed-off-by: Chunyu Hu <chuhu@redhat.com>
Acked-by: David Hildenbrand (Arm) <david@kernel.org>
Reviewed-by: Lorenzo Stoakes <ljs@kernel.org>
Cc: Nico Pache <npache@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
tools/testing/selftests/mm/vm_util.c

index ad96d19d1b850adc535f1e30051a382720cddd40..db94564f4431234bd3a9596d1e92e194cd0e6f93 100644 (file)
@@ -767,15 +767,24 @@ int unpoison_memory(unsigned long pfn)
 
 void write_file(const char *path, const char *buf, size_t buflen)
 {
-       int fd;
+       int fd, saved_errno;
        ssize_t numwritten;
 
+       if (buflen < 2)
+               ksft_exit_fail_msg("Incorrect buffer len: %zu\n", buflen);
+
        fd = open(path, O_WRONLY);
        if (fd == -1)
                ksft_exit_fail_msg("%s open failed: %s\n", path, strerror(errno));
 
        numwritten = write(fd, buf, buflen - 1);
+       saved_errno = errno;
        close(fd);
-       if (numwritten < 1)
-               ksft_exit_fail_msg("Write failed\n");
+       errno = saved_errno;
+       if (numwritten < 0)
+               ksft_exit_fail_msg("%s write(%.*s) failed: %s\n", path, (int)(buflen - 1),
+                               buf, strerror(errno));
+       if (numwritten != buflen - 1)
+               ksft_exit_fail_msg("%s write(%.*s) is truncated, expected %zu bytes, got %zd bytes\n",
+                               path, (int)(buflen - 1), buf, buflen - 1, numwritten);
 }