From: Florian Weimer Date: Tue, 29 Mar 2016 09:27:32 +0000 (+0200) Subject: nss_db: Propagate ERANGE error if parse_line fails [BZ #19837] X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=28a87e027450b66faf1a431fc62779297c760e29;p=thirdparty%2Fglibc.git nss_db: Propagate ERANGE error if parse_line fails [BZ #19837] Reproducer (needs to run as root): perl -e \ 'print "large:x:999:" . join(",", map {"user$_"} (1 .. 135))."\n"' \ >> /etc/group cd /var/db make getent -s db group After the fix, the last command should list the "large" group. The magic number 135 has been chosen so that the line is shorter than 1024 bytes, but the pointers required to encode the member array will cross the threshold, triggering the bug. (cherry picked from commit a6033052d08027f745867e5e346852da1959226c) --- diff --git a/ChangeLog b/ChangeLog index 29b7cf5b0e1..6635c5e2f1b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2016-03-29 Florian Weimer + + [BZ #19837] + * nss/nss_db/db-XXX.c (_nss_db_getENTNAME_r): Propagate ERANGE + error if parse_line fails. + 2016-04-20 Yvan Roux * stdlib/setenv.c (unsetenv): Fix ambiguous 'else'. diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c index 03c18d70de6..125a5e9b126 100644 --- a/nss/nss_db/db-XXX.c +++ b/nss/nss_db/db-XXX.c @@ -288,8 +288,8 @@ CONCAT(_nss_db_get,ENTNAME_r) (struct STRUCTURE *result, char *buffer, } if (err < 0) { - H_ERRNO_SET (HOST_NOT_FOUND); - status = NSS_STATUS_NOTFOUND; + H_ERRNO_SET (NETDB_INTERNAL); + status = NSS_STATUS_TRYAGAIN; break; }