Date: Wed, 11 Feb 2015 13:48:10 -0500 From: Eric van Gyzen <eric@vangyzen.net> To: =?windows-1252?Q?Jean-S=E9bastien_P=E9dron?= <dumbbell@FreeBSD.org>, freebsd-current@freebsd.org Subject: Re: unbound crashes on bootup Message-ID: <54DBA3EA.6050706@vangyzen.net> In-Reply-To: <54DB9A0C.1010806@FreeBSD.org> References: <1264.1423227963@critter.freebsd.dk> <54DB9A0C.1010806@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On 02/11/2015 13:06, Jean-Sébastien Pédron wrote:
> On 06.02.2015 14:06, Poul-Henning Kamp wrote:
>> I just updated my -current to r278283, and unbound (still) croaks
>> during bootup:
>
> Hi!
>
> I have a similar problem. Also, unbound crashes each time I start/stop
> OpenVPN. I suppose the problem is the same in both cases.
>
> The crash happens in the config_lookup_uid() in
> contrib/unbound/util/config_file.c. Here's the code:
>
> struct passwd *pwd;
> if((pwd = getpwnam(cfg->username)) == NULL)
> log_err("user '%s' does not exist.", cfg->username);
> cfg->uid = pwd->pw_uid;
getpwnam() is not thread-safe. I'm surprised unbound would use it.
Calling it from multiple threads can cause trouble, although I don't
know off-hand if it could cause this problem. As an experiment, you
might change it to getpwnam_r() and see it the problem persists.
Otherwise, adding errno to the log message might help. Be sure to zero
errno before calling getpwnam().
> getpwnam(3) returns NULL: an error message is logged but the function
> doesn't return. Therefore, the program segfaults on "pwd->pw_uid" on the
> next line.
>
> But why did getpwnam(3) return NULL in the first place? It looks for the
> "unbound" user which exists. getpwnam() calls _nsdispatch() which fails.
>
> I have the default nsswitch.conf. I didn't look at the problem more
> deeply yet, but could getpwnam()/_nsdispatch() be unhappy with the
> absence of a working DNS resolver (unbound is being (re)started)?
>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?54DBA3EA.6050706>
