From 82f2eb73b19ca239e3f93d90f546660d4532201a Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 21 Nov 2025 09:11:34 +0900 Subject: [PATCH] pam-util: use correct errno - pam_log_oom() passes ENOMEM rather than -ENOMEM, hence previously pam_log_oom() did not return PAM_BUF_ERR. - We may (mistakenly) pass SYNTHETIC_ERRNO(). Let's gracefully handle that. - Introduce errno_to_pam_error() helper function. --- src/shared/pam-util.c | 7 ++++++- src/shared/pam-util.h | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/shared/pam-util.c b/src/shared/pam-util.c index 7cc0b5aac7..711bb22769 100644 --- a/src/shared/pam-util.c +++ b/src/shared/pam-util.c @@ -69,16 +69,21 @@ void pam_log_setup(void) { log_set_target(LOG_TARGET_SYSLOG); } +int errno_to_pam_error(int error) { + return ERRNO_VALUE(error) == ENOMEM ? PAM_BUF_ERR : PAM_SERVICE_ERR; +} + int pam_syslog_errno(pam_handle_t *handle, int level, int error, const char *format, ...) { va_list ap; + error = ERRNO_VALUE(error); LOCAL_ERRNO(error); va_start(ap, format); sym_pam_vsyslog(handle, level, format, ap); va_end(ap); - return error == -ENOMEM ? PAM_BUF_ERR : PAM_SERVICE_ERR; + return errno_to_pam_error(error); } int pam_syslog_pam_error(pam_handle_t *handle, int level, int error, const char *format, ...) { diff --git a/src/shared/pam-util.h b/src/shared/pam-util.h index 204eab04ca..9c5f2f3799 100644 --- a/src/shared/pam-util.h +++ b/src/shared/pam-util.h @@ -31,6 +31,8 @@ int dlopen_libpam(void); void pam_log_setup(void); +int errno_to_pam_error(int error) _const_; + int pam_syslog_errno(pam_handle_t *handle, int level, int error, const char *format, ...) _printf_(4,5); int pam_syslog_pam_error(pam_handle_t *handle, int level, int error, const char *format, ...) _printf_(4,5);