lib/idmapping.c: get_map_ranges(): Move range check to a2ul() calls
Link: <https://github.com/shadow-maint/shadow/commit/ff2baed5dbf81e8967b805889f565fedb48600df#r136635300> Cc: Serge Hallyn <serge@hallyn.com> Signed-off-by: Alejandro Colomar <alx@kernel.org>
This commit is contained in:
committed by
Serge Hallyn
parent
f89925c219
commit
5586f43d48
+16
-8
@@ -15,7 +15,7 @@
|
||||
|
||||
#include "alloc/calloc.h"
|
||||
#include "alloc/x/xmalloc.h"
|
||||
#include "atoi/str2i.h"
|
||||
#include "atoi/a2i.h"
|
||||
#include "prototypes.h"
|
||||
#include "string/sprintf/stpeprintf.h"
|
||||
#include "idmapping.h"
|
||||
@@ -52,15 +52,27 @@ struct map_range *get_map_ranges(int ranges, int argc, char **argv)
|
||||
/* Gather up the ranges from the command line */
|
||||
m = mappings;
|
||||
for (idx = 0, argidx = 0; idx < ranges; idx++, argidx += 3, m++) {
|
||||
if (str2ul(&m->upper, argv[argidx + 0]) == -1) {
|
||||
if (a2ul(&m->upper, argv[argidx + 0], NULL, 0, 0, UINT_MAX) == -1) {
|
||||
if (errno == ERANGE) {
|
||||
fprintf(log_get_logfd(), _( "%s: subuid overflow detected.\n"), log_get_progname());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
free(mappings);
|
||||
return NULL;
|
||||
}
|
||||
if (str2ul(&m->lower, argv[argidx + 1]) == -1) {
|
||||
if (a2ul(&m->lower, argv[argidx + 1], NULL, 0, 0, UINT_MAX) == -1) {
|
||||
if (errno == ERANGE) {
|
||||
fprintf(log_get_logfd(), _( "%s: subuid overflow detected.\n"), log_get_progname());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
free(mappings);
|
||||
return NULL;
|
||||
}
|
||||
if (str2ul(&m->count, argv[argidx + 2]) == -1) {
|
||||
if (a2ul(&m->count, argv[argidx + 2], NULL, 0, 0, UINT_MAX) == -1) {
|
||||
if (errno == ERANGE) {
|
||||
fprintf(log_get_logfd(), _( "%s: subuid overflow detected.\n"), log_get_progname());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
free(mappings);
|
||||
return NULL;
|
||||
}
|
||||
@@ -68,10 +80,6 @@ struct map_range *get_map_ranges(int ranges, int argc, char **argv)
|
||||
fprintf(log_get_logfd(), _( "%s: subuid overflow detected.\n"), log_get_progname());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if (m->upper > UINT_MAX || m->lower > UINT_MAX || m->count > UINT_MAX) {
|
||||
fprintf(log_get_logfd(), _( "%s: subuid overflow detected.\n"), log_get_progname());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if (m->lower + m->count > UINT_MAX || m->upper + m->count > UINT_MAX) {
|
||||
fprintf(log_get_logfd(), _( "%s: subuid overflow detected.\n"), log_get_progname());
|
||||
exit(EXIT_FAILURE);
|
||||
|
||||
Reference in New Issue
Block a user