diff --git a/ChangeLog b/ChangeLog index b8dbad05..fac8d359 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,9 @@ -2010-06-02 Cal Peake +2011-06-02 Peter Vrabec + + * libmisc/find_new_uid.c, libmisc/find_new_gid.c: Add missing + memory allocation check. + +2011-06-02 Cal Peake * NEWS, libmisc/addgrps.c: Fix allocator loop. Continue to getgroups() when getgroups fails (-1) with errno==EINVAL. diff --git a/libmisc/find_new_gid.c b/libmisc/find_new_gid.c index ce534b62..668782eb 100644 --- a/libmisc/find_new_gid.c +++ b/libmisc/find_new_gid.c @@ -32,6 +32,7 @@ #include #include +#include #include "prototypes.h" #include "groupio.h" @@ -75,7 +76,13 @@ int find_new_gid (bool sys_group, Prog, (unsigned long) gid_min, getdef_ulong ("GID_MIN", 1000UL), (unsigned long) gid_max); } } - used_gids = alloca (sizeof (bool) * (gid_max +1)); + used_gids = malloc (sizeof (bool) * (gid_max +1)); + if (NULL == used_gids) { + fprintf (stderr, + _("%s: failed to allocate memory: %s\n"), + Prog, strerror (errno)); + return -1; + } memset (used_gids, false, sizeof (bool) * (gid_max + 1)); if ( (NULL != preferred_gid) @@ -189,6 +196,7 @@ int find_new_gid (bool sys_group, } } + free (used_gids); *gid = group_id; return 0; } diff --git a/libmisc/find_new_uid.c b/libmisc/find_new_uid.c index 6077eb1e..48472cb1 100644 --- a/libmisc/find_new_uid.c +++ b/libmisc/find_new_uid.c @@ -32,6 +32,7 @@ #include #include +#include #include "prototypes.h" #include "pwio.h" @@ -75,7 +76,13 @@ int find_new_uid (bool sys_user, Prog, (unsigned long) uid_min, getdef_ulong ("UID_MIN", 1000UL), (unsigned long) uid_max); } } - used_uids = alloca (sizeof (bool) * (uid_max +1)); + used_uids = malloc (sizeof (bool) * (uid_max +1)); + if (NULL == used_uids) { + fprintf (stderr, + _("%s: failed to allocate memory. %s\n"), + Prog, strerror (errno)); + return -1; + } memset (used_uids, false, sizeof (bool) * (uid_max + 1)); if ( (NULL != preferred_uid) @@ -189,6 +196,7 @@ int find_new_uid (bool sys_user, } } + free (used_uids); *uid = user_id; return 0; }