From fabf4cd14108a60d9486f38ae58694d615592bc9 Mon Sep 17 00:00:00 2001 From: Darren Tucker Date: Tue, 7 Oct 2025 21:07:05 +1100 Subject: [PATCH 6/6] Use calloc for sshkeys if mmap is not supported. Based on Github PR#597 from Mike Frysinger, any bugs added by me. --- configure.ac | 2 ++ sshkey.c | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/configure.ac b/configure.ac index 3eb6d4697..98f2e3e1c 100644 --- a/configure.ac +++ b/configure.ac @@ -536,6 +536,7 @@ AC_CHECK_HEADERS([ \ nlist.h \ poll.h \ stdint.h \ + sys/mmap.h \ sys/stat.h \ sys/time.h \ sys/un.h \ @@ -2103,6 +2104,7 @@ AC_CHECK_FUNCS([ \ memmove \ memset_s \ mkdtemp \ + mmap \ ngetaddrinfo \ nlist \ nsleep \ diff --git a/sshkey.c b/sshkey.c index e17e929e0..206b72921 100644 --- a/sshkey.c +++ b/sshkey.c @@ -723,6 +723,7 @@ sshkey_sk_cleanup(struct sshkey *k) static int sshkey_prekey_alloc(u_char **prekeyp, size_t len) { +#if defined(HAVE_MMAP) && defined(MAP_ANON) && defined(MAP_PRIVATE) u_char *prekey; *prekeyp = NULL; @@ -734,14 +735,21 @@ sshkey_prekey_alloc(u_char **prekeyp, size_t len) #endif *prekeyp = prekey; return 0; +#else + *prekeyp = calloc(1, len); +#endif /* HAVE_MMAP et al */ } static void sshkey_prekey_free(void *prekey, size_t len) { +#if defined(HAVE_MMAP) && defined(MAP_ANON) && defined(MAP_PRIVATE) if (prekey == NULL) return; munmap(prekey, len); +#else + free(prekey); +#endif /* HAVE_MMAP et al */ } static void -- 2.51.0