* libmisc/find_new_uid.c, libmisc/find_new_gid.c: Add missing

memory allocation check.
This commit is contained in:
nekral-guest 2011-06-02 18:40:06 +00:00
parent f140c3a0e5
commit 58baa7aa61
3 changed files with 24 additions and 3 deletions

View File

@ -1,4 +1,9 @@
2010-06-02 Cal Peake <cp@absolutedigital.net> 2011-06-02 Peter Vrabec <pvrabec@redhat.com>
* libmisc/find_new_uid.c, libmisc/find_new_gid.c: Add missing
memory allocation check.
2011-06-02 Cal Peake <cp@absolutedigital.net>
* NEWS, libmisc/addgrps.c: Fix allocator loop. Continue to * NEWS, libmisc/addgrps.c: Fix allocator loop. Continue to
getgroups() when getgroups fails (-1) with errno==EINVAL. getgroups() when getgroups fails (-1) with errno==EINVAL.

View File

@ -32,6 +32,7 @@
#include <assert.h> #include <assert.h>
#include <stdio.h> #include <stdio.h>
#include <errno.h>
#include "prototypes.h" #include "prototypes.h"
#include "groupio.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); 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)); memset (used_gids, false, sizeof (bool) * (gid_max + 1));
if ( (NULL != preferred_gid) if ( (NULL != preferred_gid)
@ -189,6 +196,7 @@ int find_new_gid (bool sys_group,
} }
} }
free (used_gids);
*gid = group_id; *gid = group_id;
return 0; return 0;
} }

View File

@ -32,6 +32,7 @@
#include <assert.h> #include <assert.h>
#include <stdio.h> #include <stdio.h>
#include <errno.h>
#include "prototypes.h" #include "prototypes.h"
#include "pwio.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); 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)); memset (used_uids, false, sizeof (bool) * (uid_max + 1));
if ( (NULL != preferred_uid) if ( (NULL != preferred_uid)
@ -189,6 +196,7 @@ int find_new_uid (bool sys_user,
} }
} }
free (used_uids);
*uid = user_id; *uid = user_id;
return 0; return 0;
} }