mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 07:51:31 -04:00
selftests/mm/vm_util: robust write_file()
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>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user