Currently KMSAN does not fully propagate metadata in strlcpy() and strlcat(), because they are built with -ffreestanding and call memcpy(). In this combination memcpy() calls are not instrumented. Fix by copying the metadata manually. Add the __STDC_HOSTED__ #ifdef in case the code is compiled with different flags in the future. Signed-off-by: Ilya Leoshkevich <iii@xxxxxxxxxxxxx> --- lib/string.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/string.c b/lib/string.c index be26623953d2..e83c6dd77ec6 100644 --- a/lib/string.c +++ b/lib/string.c @@ -111,6 +111,9 @@ size_t strlcpy(char *dest, const char *src, size_t size) if (size) { size_t len = (ret >= size) ? size - 1 : ret; __builtin_memcpy(dest, src, len); +#if __STDC_HOSTED__ == 0 + kmsan_memmove_metadata(dest, src, len); +#endif dest[len] = '\0'; } return ret; @@ -261,6 +264,9 @@ size_t strlcat(char *dest, const char *src, size_t count) if (len >= count) len = count-1; __builtin_memcpy(dest, src, len); +#if __STDC_HOSTED__ == 0 + kmsan_memmove_metadata(dest, src, len); +#endif dest[len] = 0; return res; } -- 2.41.0