Use strerror_r(3) for the printf family %m.
There's TLS space used for unknown errno values, and a call to printf
shouldn't clobber that. No-one will ever hit this in real life, but
since it's easily fixed...
Bug: http://b/112776560
Test: ran tests
Change-Id: I8c2437f2e5214e652119791d4e162a197b049d5b
diff --git a/libc/stdio/vfwprintf.cpp b/libc/stdio/vfwprintf.cpp
index 19cce17..dd51eec 100644
--- a/libc/stdio/vfwprintf.cpp
+++ b/libc/stdio/vfwprintf.cpp
@@ -439,7 +439,8 @@
__fortify_fatal("%%n not allowed on Android");
case 'm':
free(convbuf);
- convbuf = helpers::mbsconv(strerror(caller_errno), prec);
+ convbuf = helpers::mbsconv(strerror_r(caller_errno,
+ reinterpret_cast<char*>(buf), sizeof(buf)), prec);
if (convbuf == nullptr) {
fp->_flags |= __SERR;
goto error;