aboutsummaryrefslogtreecommitdiff
path: root/Linux-PAM/libpam/pam_misc.c
diff options
context:
space:
mode:
authorSteve Langasek <steve.langasek@ubuntu.com>2019-01-03 16:18:43 -0800
committerSteve Langasek <steve.langasek@ubuntu.com>2019-01-03 17:01:52 -0800
commit26ee21df2a5fe63f08cfae8c7d35c24bd3dd4f04 (patch)
treee6e25c1da5974a60660c8b2108d609fae00af126 /Linux-PAM/libpam/pam_misc.c
parenta3ee6f5fc767b1b01568bce6dd31fc9ca932a8d2 (diff)
parent9727ff2a3fa0e94a42b34a579027bacf4146d571 (diff)
downloadpam-26ee21df2a5fe63f08cfae8c7d35c24bd3dd4f04.tar.gz
pam-26ee21df2a5fe63f08cfae8c7d35c24bd3dd4f04.tar.bz2
pam-26ee21df2a5fe63f08cfae8c7d35c24bd3dd4f04.zip
merge upstream version 0.99.10.0
Diffstat (limited to 'Linux-PAM/libpam/pam_misc.c')
-rw-r--r--Linux-PAM/libpam/pam_misc.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/Linux-PAM/libpam/pam_misc.c b/Linux-PAM/libpam/pam_misc.c
index 770c9cce..574a570e 100644
--- a/Linux-PAM/libpam/pam_misc.c
+++ b/Linux-PAM/libpam/pam_misc.c
@@ -137,6 +137,28 @@ char *_pam_strdup(const char *x)
return new; /* return the duplicate or NULL on error */
}
+/*
+ * Safe duplication of memory buffers. "Paranoid"; don't leave
+ * evidence of old token around for later stack analysis.
+ */
+
+char *_pam_memdup(const char *x, int len)
+{
+ register char *new=NULL;
+
+ if (x != NULL) {
+ if ((new = malloc(len)) == NULL) {
+ len = 0;
+ pam_syslog(NULL, LOG_CRIT, "_pam_memdup: failed to get memory");
+ } else {
+ memcpy (new, x, len);
+ }
+ x = NULL;
+ }
+
+ return new; /* return the duplicate or NULL on error */
+}
+
/* Generate argv, argc from s */
/* caller must free(argv) */