]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
lib/idmapping.c: get_map_ranges(): Don't exit() from a library function
authorAlejandro Colomar <alx@kernel.org>
Tue, 16 Jan 2024 01:27:56 +0000 (02:27 +0100)
committerSerge Hallyn <serge@hallyn.com>
Fri, 12 Jul 2024 03:42:58 +0000 (22:42 -0500)
Fixes: ff2baed5dbf8 ("idmapping: add more checks for overflow")
Link: <https://github.com/shadow-maint/shadow/commit/ff2baed5dbf81e8967b805889f565fedb48600df#r136635300>
Reported-by: Alejandro Colomar <alx@kernel.org>
Suggested-by: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
lib/idmapping.c

index 5c2fe5d327fea4c46adcc5168bb8a5cdbfc5bdab..adc61af88cdd3d2f14b071f1455cb4816f936ab3 100644 (file)
@@ -46,25 +46,21 @@ get_map_ranges(int ranges, int argc, char **argv)
        if (!mappings) {
                fprintf(log_get_logfd(), _( "%s: Memory allocation failure\n"),
                        log_get_progname());
-               exit(EXIT_FAILURE);
+               return NULL;
        }
 
        /* Gather up the ranges from the command line */
        m = mappings;
        for (int i = 0; i < ranges * 3; i+=3, m++) {
                if (a2ul(&m->upper, argv[i + 0], NULL, 0, 0, UINT_MAX) == -1) {
-                       if (errno == ERANGE) {
+                       if (errno == ERANGE)
                                fprintf(log_get_logfd(), _( "%s: subuid overflow detected.\n"), log_get_progname());
-                               exit(EXIT_FAILURE);
-                       }
                        free(mappings);
                        return NULL;
                }
                if (a2ul(&m->lower, argv[i + 1], NULL, 0, 0, UINT_MAX) == -1) {
-                       if (errno == ERANGE) {
+                       if (errno == ERANGE)
                                fprintf(log_get_logfd(), _( "%s: subuid overflow detected.\n"), log_get_progname());
-                               exit(EXIT_FAILURE);
-                       }
                        free(mappings);
                        return NULL;
                }
@@ -73,10 +69,8 @@ get_map_ranges(int ranges, int argc, char **argv)
                             MIN(UINT_MAX, ULONG_MAX - 1) - m->upper))
                    == -1)
                {
-                       if (errno == ERANGE) {
+                       if (errno == ERANGE)
                                fprintf(log_get_logfd(), _( "%s: subuid overflow detected.\n"), log_get_progname());
-                               exit(EXIT_FAILURE);
-                       }
                        free(mappings);
                        return NULL;
                }