From 4aa4a0f8c61acb4be1feeecb94779d04431a60c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Sj=C3=B6lund?= Date: Thu, 12 Feb 2026 13:12:16 +0100 Subject: [PATCH] utils: refactor set_home_env MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use the return value from fgetpwent_r as error value. Reference: https://man7.org/linux/man-pages/man3/fgetpwent_r.3.html#RETURN_VALUE Closes: https://github.com/containers/crun/issues/2010 Signed-off-by: Erik Sjölund --- src/libcrun/utils.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/libcrun/utils.c b/src/libcrun/utils.c index 8c0d2dac43..f608b7fc45 100644 --- a/src/libcrun/utils.c +++ b/src/libcrun/utils.c @@ -1447,7 +1447,6 @@ set_home_env (uid_t id) cleanup_free char *buf = NULL; long buf_size; cleanup_file FILE *stream = NULL; - int ret = -1; buf_size = sysconf (_SC_GETPW_R_SIZE_MAX); if (buf_size < 0) @@ -1463,11 +1462,15 @@ set_home_env (uid_t id) { struct passwd *ret_pw = NULL; - ret = fgetpwent_r (stream, &pwd, buf, buf_size, &ret_pw); + int ret = fgetpwent_r (stream, &pwd, buf, buf_size, &ret_pw); if (UNLIKELY (ret != 0)) { - if (errno != ERANGE) - goto error; + if (ret != ERANGE) + { + /* Let callers handle the error if the user was not found. */ + errno = ret; + goto error; + } buf_size *= 2; buf = xrealloc (buf, buf_size); @@ -1482,8 +1485,7 @@ set_home_env (uid_t id) } error: - /* Let callers handle the error if the user was not found. */ - return ret ? -errno : 0; + return -errno; } /*if subuid or subgid exist, take the first range for the user */