]> andersk Git - openssh.git/blobdiff - monitor_mm.c
[configure.ac] Make sure -lcrypto is before -lsocket for sco3. ok mouring@
[openssh.git] / monitor_mm.c
index ab4d5c9571cf2a40daa07c9b4f7df13fc15531ad..e57c87cc2a0c9150bf87f78477fcc4a6d36d2fe2 100644 (file)
@@ -24,7 +24,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: monitor_mm.c,v 1.6 2002/06/04 23:05:49 markus Exp $");
+RCSID("$OpenBSD: monitor_mm.c,v 1.8 2002/08/02 14:43:15 millert Exp $");
 
 #ifdef HAVE_SYS_MMAN_H
 #include <sys/mman.h>
@@ -38,7 +38,14 @@ RCSID("$OpenBSD: monitor_mm.c,v 1.6 2002/06/04 23:05:49 markus Exp $");
 static int
 mm_compare(struct mm_share *a, struct mm_share *b)
 {
-       return ((char *)a->address - (char *)b->address);
+       long diff = (char *)a->address - (char *)b->address;
+
+       if (diff == 0)
+               return (0);
+       else if (diff < 0)
+               return (-1);
+       else
+               return (1);
 }
 
 RB_GENERATE(mmtree, mm_share, next, mm_compare)
@@ -84,15 +91,9 @@ mm_create(struct mm_master *mmalloc, size_t size)
         */
        mm->mmalloc = mmalloc;
 
-#ifdef HAVE_MMAP_ANON_SHARED
-       address = mmap(NULL, size, PROT_WRITE|PROT_READ, MAP_ANON|MAP_SHARED,
-           -1, 0);
+       address = xmmap(size);
        if (address == MAP_FAILED)
                fatal("mmap(%lu): %s", (u_long)size, strerror(errno));
-#else
-       fatal("%s: UsePrivilegeSeparation=yes and Compression=yes not supported",
-           __func__);
-#endif
 
        mm->address = address;
        mm->size = size;
@@ -135,7 +136,7 @@ mm_destroy(struct mm_master *mm)
                fatal("munmap(%p, %lu): %s", mm->address, (u_long)mm->size,
                    strerror(errno));
 #else
-       fatal("%s: UsePrivilegeSeparation=yes not supported",
+       fatal("%s: UsePrivilegeSeparation=yes and Compression=yes not supported",
            __func__);
 #endif
        if (mm->mmalloc == NULL)
@@ -165,8 +166,10 @@ mm_malloc(struct mm_master *mm, size_t size)
 
        if (size == 0)
                fatal("mm_malloc: try to allocate 0 space");
+       if (size > SIZE_T_MAX - MM_MINSIZE + 1)
+               fatal("mm_malloc: size too big");
 
-       size = ((size + MM_MINSIZE - 1) / MM_MINSIZE) * MM_MINSIZE;
+       size = ((size + (MM_MINSIZE - 1)) / MM_MINSIZE) * MM_MINSIZE;
 
        RB_FOREACH(mms, mmtree, &mm->rb_free) {
                if (mms->size >= size)
This page took 0.03982 seconds and 4 git commands to generate.