From: Lennart Poettering Date: Mon, 25 Oct 2021 08:59:56 +0000 (+0200) Subject: tree-wide: explicitly unpoison getdents64() memory X-Git-Tag: v250-rc1~426^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0dbce03c37d1e11837dd7f9b80b9964ca539c914;p=thirdparty%2Fsystemd.git tree-wide: explicitly unpoison getdents64() memory Apparently memory sanitizer doesn't grok getdents64() properly. Let's address that by explicitly marken memory initialized by getdents64() as unpoisoned. --- diff --git a/src/basic/recurse-dir.c b/src/basic/recurse-dir.c index dbada824315..d1fee91c329 100644 --- a/src/basic/recurse-dir.c +++ b/src/basic/recurse-dir.c @@ -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 diff --git a/src/basic/stat-util.c b/src/basic/stat-util.c index 77e728bcab5..efac7b002e4 100644 --- a/src/basic/stat-util.c +++ b/src/basic/stat-util.c @@ -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;