From: Nikita Popov Date: Mon, 1 Jul 2019 09:02:31 +0000 (+0200) Subject: Msan: Unpoison buffer written by file cache X-Git-Tag: php-7.4.0alpha3~101 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=da06f7f383e2b54094975b3b49fd05076191976e;p=php Msan: Unpoison buffer written by file cache It would be great if this were fully initialized, but it's not really a problem either (as long as we don't care about reproducible file cache), so ignore this for now. --- diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c index 31f7e20cd6..2c6c16002e 100644 --- a/ext/opcache/zend_file_cache.c +++ b/ext/opcache/zend_file_cache.c @@ -49,6 +49,10 @@ # include #endif +#if __has_feature(memory_sanitizer) +# include +#endif + #ifndef ZEND_WIN32 #define zend_file_cache_unlink unlink #define zend_file_cache_open open @@ -947,6 +951,14 @@ int zend_file_cache_script_store(zend_persistent_script *script, int in_shm) info.checksum = zend_adler32(ADLER32_INIT, buf, script->size); info.checksum = zend_adler32(info.checksum, (signed char*)ZSTR_VAL((zend_string*)ZCG(mem)), info.str_size); +#if __has_feature(memory_sanitizer) + /* The buffer may contain uninitialized regions. However, the uninitialized parts will not be + * used when reading the cache. We should probably still try to get things fully initialized + * for reproducibility, but for now ignore this issue. */ + __msan_unpoison(&info, sizeof(info)); + __msan_unpoison(buf, script->size); +#endif + #ifdef HAVE_SYS_UIO_H vec[0].iov_base = &info; vec[0].iov_len = sizeof(info);