]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
Use calloc for sshkeys if mmap is not supported.
authorDarren Tucker <dtucker@dtucker.net>
Tue, 7 Oct 2025 10:07:05 +0000 (21:07 +1100)
committerDarren Tucker <dtucker@dtucker.net>
Tue, 7 Oct 2025 10:07:05 +0000 (21:07 +1100)
Based on Github PR#597 from Mike Frysinger, any bugs added by me.

configure.ac
sshkey.c

index 3eb6d4697f98a786925e3dcf29f418478082f430..98f2e3e1c5ab45452f107c5f1f618a1c689c64a3 100644 (file)
@@ -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 \
index e17e929e02587dd8113156b9eda3f57e7791d698..206b72921358d3582eaa031eb72a34323e97ceab 100644 (file)
--- 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