Index: lib/libc/gen/getgrent.c =================================================================== --- lib/libc/gen/getgrent.c (revision 364821) +++ lib/libc/gen/getgrent.c (working copy) @@ -332,10 +332,18 @@ orig_buf_size = va_arg(ap, size_t); ret_errno = va_arg(ap, int *); - if (orig_buf_size < - buffer_size - sizeof(struct group) - sizeof(char *)) { + if (orig_buf_size + sizeof(struct group) + sizeof(char *) < + buffer_size) + { *ret_errno = ERANGE; return (NS_RETURN); + } else if (buffer_size < sizeof(struct group) + sizeof(char *)) { + /* + * nscd(8) sometimes returns buffer_size=1 for nonexistent + * groups. + */ + *ret_errno = 0; + return (NS_UNAVAIL); } memcpy(grp, buffer, sizeof(struct group));