Re: [PATCH] fix util_lookup_group to handle large groups

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 8/1/09, Eric W. Biederman <ebiederm@xxxxxxxxxxxx> wrote:
>
> I have recently been getting the above message on fc11 and
> I have traced it down to a bug in util_lookup_group.
>
> As of 145 util_lookup_group reads:
>
> gid_t util_lookup_group(struct udev *udev, const char *group)
> {
> 	char *endptr;
> 	int buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
> 	char buf[buflen];
> 	struct group grbuf;
> 	struct group *gr;
> 	gid_t gid = 0;
>
> 	if (strcmp(group, "root") == 0)
> 		return 0;
> 	gid = strtoul(group, &endptr, 10);
> 	if (endptr[0] == '\0')
> 		return gid;
>
> 	errno = 0;
> 	getgrnam_r(group, &grbuf, buf, buflen, &gr);
> 	if (gr != NULL)
> 		return gr->gr_gid;
> 	if (errno == 0 || errno == ENOENT || errno == ESRCH)
> 		err(udev, "specified group '%s' unknown\n", group);
> 	else
> 		err(udev, "error resolving group '%s': %m\n", group);
> 	return 0;
> }
>
> The errno value from getgrnam_r here is ERANGE which is documented as
> "Insufficient buffer space supplied".
>
> When I call get getgrnam_r with a large enough buffer everything
> works.  Indicating that the problem is that sysconf is returning
> a value too small.
>
> A quick google search tells me that sysconf(_S_GETGR_R_SIZE_MAX)
> is documented as:
>
>> sysconf(_S_GETGR_R_SIZE_MAX) returns either -1 or a good
>> suggested starting value for buflen.  It does not return the
>> worst case possible for buflen.
>
> In my case I have a group with about 50 users in /etc/group
> and that is what triggered the problem in udev and caused
> all of the udevs group lookups to fail.
>
> The following patch which dynamically allocates the group member buffer
> should fix this problem.
>
> Signed-off-by: "Eric W. Biederman" <ebiederm@xxxxxxxxxxxx>

Makes sense.  Thanks, this was my mistake.  I believed the manpage for
getgrnam_r.

"The maximum needed size for buf can be found using sysconf(3) with
the _SC_GETGR_R_SIZE_MAX parameter."

Regards
Alan
--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Linux DVB]     [Asterisk Internet PBX]     [DCCP]     [Netdev]     [X.org]     [Util Linux NG]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux