[Pam-developers] [PATCH] libpam_misc: fix an inconsistency in handling memory allocation errors
Dmitry V. Levin
ldv at altlinux.org
Wed Jan 22 04:12:30 UTC 2014
When misc_conv fails to allocate memory for pam_response array, it
returns PAM_CONV_ERR. However, when read_string fails to allocate
memory for a response string, it loses the response string and silently
ignores the error, with net result as if EOF has been read.
* libpam_misc/misc_conv.c (read_string): Use strdup instead of x_strdup,
the latter is of no benefit in this case.
Do not ignore potential memory allocation errors returned by strdup,
forward them to misc_conv.
---
libpam_misc/misc_conv.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/libpam_misc/misc_conv.c b/libpam_misc/misc_conv.c
index 3f74eea..be53f34 100644
--- a/libpam_misc/misc_conv.c
+++ b/libpam_misc/misc_conv.c
@@ -210,25 +210,29 @@ static int read_string(int echo, const char *prompt, char **retstr)
}
line[nc] = '\0';
}
- *retstr = x_strdup(line);
+ *retstr = strdup(line);
_pam_overwrite(line);
+ if (!*retstr) {
+ D(("no memory for response string"));
+ nc = -1;
+ }
goto cleanexit; /* return malloc()ed string */
} else if (nc == 0) { /* Ctrl-D */
D(("user did not want to type anything"));
*retstr = NULL;
if (echo) {
fprintf(stderr, "\n");
}
goto cleanexit; /* return malloc()ed "" */
} else if (nc == -1) {
/* Don't loop forever if read() returns -1. */
D(("error reading input from the user: %m"));
if (echo) {
fprintf(stderr, "\n");
}
*retstr = NULL;
goto cleanexit; /* return NULL */
}
--
ldv
More information about the Pam-developers
mailing list