]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tree-wide: explicitly unpoison getdents64() memory 21097/head
authorLennart Poettering <lennart@poettering.net>
Mon, 25 Oct 2021 08:59:56 +0000 (10:59 +0200)
committerLennart Poettering <lennart@poettering.net>
Mon, 25 Oct 2021 19:51:37 +0000 (21:51 +0200)
Apparently memory sanitizer doesn't grok getdents64() properly. Let's
address that by explicitly marken memory initialized by getdents64() as
unpoisoned.

src/basic/recurse-dir.c
src/basic/stat-util.c

index dbada8243150b9d01b8e055ae5ae109336451e05..d1fee91c3294322d5dbb70c9ec677367037b455c 100644 (file)
@@ -60,6 +60,8 @@ int readdir_all(int dir_fd,
                 if (n == 0)
                         break;
 
+                msan_unpoison((uint8_t*) de->buffer + de->buffer_size, n);
+
                 de->buffer_size += n;
 
                 if (de->buffer_size < bs - DIRENT_SIZE_MAX) /* Still room for one more entry, then try to
index 77e728bcab537c588e418ccaef701bb2fc083aa3..efac7b002e4182bbb96aa9abaadfa39bbf9b20d9 100644 (file)
@@ -103,6 +103,8 @@ int dir_is_empty_at(int dir_fd, const char *path) {
         if (n < 0)
                 return -errno;
 
+        msan_unpoison(&buffer, n);
+
         FOREACH_DIRENT_IN_BUFFER(de, &buffer.de, n)
                 if (!dot_or_dot_dot(de->d_name))
                         return 0;