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)? >Received on Wed Feb 11 2015 - 17:48:19 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:55 UTC