Handle too-small buffers in Linux getlogin_r.

This commit is contained in:
Ulrich Drepper 2010-05-05 09:44:50 -07:00
parent 3155f06621
commit 5ae958d741
3 changed files with 17 additions and 4 deletions

View File

@ -1,5 +1,9 @@
2010-05-05 Ulrich Drepper <drepper@redhat.com>
[BZ #11571]
* sysdeps/unix/sysv/linux/getlogin_r.c (__getlogin_r_loginuid): Handle
too small buffers according to the standard.
* sysdeps/unix/sysv/linux/kernel-features.h: Alpha doesn't have to be
handled here anymore.
Patch mostly by Matt Turner <mattst88@gmail.com>.

2
NEWS
View File

@ -16,7 +16,7 @@ Version 2.12
11185, 11186, 11187, 11188, 11189, 11190, 11191, 11192, 11193, 11194,
11200, 11230, 11235, 11242, 11254, 11258, 11271, 11272, 11276, 11279,
11287, 11292, 11319, 11332, 11333, 11387, 11389, 11390, 11394, 11397,
11410, 11438, 11449, 11470, 11471, 11520, 11537, 11538
11410, 11438, 11449, 11470, 11471, 11520, 11537, 11538, 11571
* New interfaces: pthread_getname_np, pthread_setname_np

View File

@ -81,13 +81,22 @@ __getlogin_r_loginuid (name, namesize)
if (tpwd == NULL)
goto fail;
strncpy (name, pwd.pw_name, namesize - 1);
name[namesize - 1] = '\0';
int result = 0;
size_t needed = strlen (pwd.pw_name) + 1;
if (needed > namesize)
{
__set_errno (ERANGE);
result = ERANGE;
goto out;
}
memcpy (name, pwd.pw_name, needed);
out:
if (use_malloc)
free (buf);
return 0;
return result;
}