On 1/22/19 11:23 AM, Daniel P. Berrangé wrote: > >>> On this point though, does anyone know of any platforms we support[1], >>> or are likely to support in future, where 'strerror' is *not* thread >>> safe ? >> >> I'm not coming up with one, and I think the problem is independent of >> this series (if we DO have a problem, it's a series all its own to >> eradicate the use of strerror() in favor of something safer, either >> picking strerror_l() or dealing with the glibc vs. BSD differences in >> strerror_r()). > > Agree that its not really something for this series - this just > made me think of it again.
Shoot - FreeBSD strerror() is not threadsafe: https://github.com/freebsd/freebsd/blob/master/lib/libc/string/strerror.c#L119 char * strerror(int num) { static char ebuf[NL_TEXTMAX]; if (strerror_r(num, ebuf, sizeof(ebuf)) != 0) errno = EINVAL; return (ebuf); } > > We went through the scrubbing in libvirt to use the sane, but still > tedious to call, variant of strerror_r() many years ago. With luck > though it is a worry that can be confined the dustbin of ancient > UNIX history....unless someone can point to evidence to the contrary ? libvirt has it easy - they let gnulib do all the work of futzing around with getting a working strerror() despite platform bugs and despite glibc's insistence on a non-POSIX signature if _GNU_SOURCE is defined. We'll have to do a bit more legwork. That said, I've added it to: https://wiki.qemu.org/Contribute/BiteSizedTasks#Error_checking if someone wants to do the grunt work. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature