Hurd: compliance fixes for getgroups

Fail with EINVAL when the requested number of groups is negative,
or when it is positive but less than the actual number of groups.
This commit is contained in:
Pino Toscano 2012-07-21 00:06:33 +02:00
parent 898c7aaba5
commit 0ced335ac0
2 changed files with 7 additions and 1 deletions

View File

@ -10,6 +10,9 @@
* sysdeps/mach/hurd/lremovexattr.c: New file, copied from removexattr.c
with O_NOLINK passed to __file_name_lookup.
* sysdeps/mach/hurd/getgroups.c: Return -1 and set EINVAL for
negative N or less than NGIDS.
2012-07-20 Joseph Myers <joseph@codesourcery.com>
* elf/Makefile (check-data): Remove.

View File

@ -30,6 +30,9 @@ __getgroups (n, gidset)
int ngids;
void *crit;
if (n < 0)
return __hurd_fail (EINVAL);
crit = _hurd_critical_section_lock ();
__mutex_lock (&_hurd_id.lock);
@ -53,7 +56,7 @@ __getgroups (n, gidset)
/* Now that the lock is released, we can safely copy the
group set into the user's array, which might fault. */
if (ngids > n)
ngids = n;
return __hurd_fail (EINVAL);
memcpy (gidset, gids, ngids * sizeof (gid_t));
}
else