mirror of
https://github.com/systemd/systemd.git
synced 2024-12-25 01:34:28 +03:00
nss-myhostname: copy first result to preallocated buffer
Fixes a segfault in nscd when using nss-myhostname. Nscd expects that an NSS module's gethostbyname4_r function returns its first result in the pre-allocated gaih_addrtuple denoted by **pat. (See nscd/aicache.c in the Glibc sources.) However, nss-myhostname doesn't fill in **pat but allocates the first result in ‘buffer’, then sets *pat. So nscd crashes (e.g. when running ‘getent ahosts my-machine’). Hard to tell if this is a bug in nscd, since there doesn't seem to be a proper API spec for gethostbyname4_r. But in any case, this patch fixes the crash by copying the first result to **pat.
This commit is contained in:
parent
13219b7f74
commit
d2f1f23ad2
@ -176,7 +176,11 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
|
||||
/* Verify the size matches */
|
||||
assert(idx == ms);
|
||||
|
||||
*pat = r_tuple_prev;
|
||||
/* Nscd expects us to store the first record in **pat. */
|
||||
if (*pat)
|
||||
**pat = *r_tuple_prev;
|
||||
else
|
||||
*pat = r_tuple_prev;
|
||||
|
||||
if (ttlp)
|
||||
*ttlp = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user