free(mappings);
return NULL;
}
- if (a2ul(&m->count, argv[argidx + 2], NULL, 0, 0, UINT_MAX) == -1) {
+ if (a2ul(&m->count, argv[argidx + 2], NULL, 0, 0,
+ MIN(UINT_MAX - m->lower, UINT_MAX - m->upper))
+ == -1)
+ {
if (errno == ERANGE) {
fprintf(log_get_logfd(), _( "%s: subuid overflow detected.\n"), log_get_progname());
exit(EXIT_FAILURE);
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);
- }
if (m->lower + m->count < m->lower || m->upper + m->count < m->upper) {
/* this one really shouldn't be possible given previous checks */
fprintf(log_get_logfd(), _( "%s: subuid overflow detected.\n"), log_get_progname());