Crash in gethostbyname() on congruent usage

Rich Felker dalias at aerifal.cx
Wed Dec 12 14:55:43 UTC 2012


On Wed, Dec 12, 2012 at 01:17:18PM +0000, Erik wrote:
> Hi,
> 
> [Please keep me on CC:, I'm not subscribed]
> 
> I'm working with current uClibc on a system with 2 CPU cores and had problems
> with gethostbyname() function if several threads will use it together.
> 
> The congruent usage of gethostbyname() (uClibc-9.32.1) by at least two threads
> can cause a crash in resolv.c : __read_etc_hosts_r(). The crash occurs
> independently from the "resolve" result.
> Root cause is a NULL pointer dereference in strcasecmp().

gethostbyname is not thread-safe. This is not an implementation bug;
it's a fundamental flaw in the interface design, since it has to
return static storage. If you want a thread-safe version you should be
using gethostbyname_r. Really, you should be using the modern
interface, getaddrinfo, and forgetting you ever heard of
gethostbyname, since we're almost in 2013 and gethostbyname, by
design, cannot support IPv6.

Rich


More information about the uClibc mailing list