summaryrefslogtreecommitdiff
path: root/monitor_mm.c
diff options
context:
space:
mode:
Diffstat (limited to 'monitor_mm.c')
-rw-r--r--monitor_mm.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/monitor_mm.c b/monitor_mm.c
index d3e6aeee5..0ba0658a1 100644
--- a/monitor_mm.c
+++ b/monitor_mm.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: monitor_mm.c,v 1.18 2013/11/08 00:39:15 djm Exp $ */ 1/* $OpenBSD: monitor_mm.c,v 1.19 2014/01/04 17:50:55 tedu Exp $ */
2/* 2/*
3 * Copyright 2002 Niels Provos <provos@citi.umich.edu> 3 * Copyright 2002 Niels Provos <provos@citi.umich.edu>
4 * All rights reserved. 4 * All rights reserved.
@@ -35,6 +35,7 @@
35 35
36#include <errno.h> 36#include <errno.h>
37#include <stdarg.h> 37#include <stdarg.h>
38#include <stddef.h>
38#include <stdlib.h> 39#include <stdlib.h>
39#include <string.h> 40#include <string.h>
40 41
@@ -46,7 +47,7 @@
46static int 47static int
47mm_compare(struct mm_share *a, struct mm_share *b) 48mm_compare(struct mm_share *a, struct mm_share *b)
48{ 49{
49 long diff = (char *)a->address - (char *)b->address; 50 ptrdiff_t diff = (char *)a->address - (char *)b->address;
50 51
51 if (diff == 0) 52 if (diff == 0)
52 return (0); 53 return (0);
@@ -73,8 +74,8 @@ mm_make_entry(struct mm_master *mm, struct mmtree *head,
73 74
74 tmp2 = RB_INSERT(mmtree, head, tmp); 75 tmp2 = RB_INSERT(mmtree, head, tmp);
75 if (tmp2 != NULL) 76 if (tmp2 != NULL)
76 fatal("mm_make_entry(%p): double address %p->%p(%lu)", 77 fatal("mm_make_entry(%p): double address %p->%p(%zu)",
77 mm, tmp2, address, (u_long)size); 78 mm, tmp2, address, size);
78 79
79 return (tmp); 80 return (tmp);
80} 81}
@@ -101,7 +102,7 @@ mm_create(struct mm_master *mmalloc, size_t size)
101 102
102 address = xmmap(size); 103 address = xmmap(size);
103 if (address == (void *)MAP_FAILED) 104 if (address == (void *)MAP_FAILED)
104 fatal("mmap(%lu): %s", (u_long)size, strerror(errno)); 105 fatal("mmap(%zu): %s", size, strerror(errno));
105 106
106 mm->address = address; 107 mm->address = address;
107 mm->size = size; 108 mm->size = size;
@@ -141,7 +142,7 @@ mm_destroy(struct mm_master *mm)
141 142
142#ifdef HAVE_MMAP 143#ifdef HAVE_MMAP
143 if (munmap(mm->address, mm->size) == -1) 144 if (munmap(mm->address, mm->size) == -1)
144 fatal("munmap(%p, %lu): %s", mm->address, (u_long)mm->size, 145 fatal("munmap(%p, %zu): %s", mm->address, mm->size,
145 strerror(errno)); 146 strerror(errno));
146#else 147#else
147 fatal("%s: UsePrivilegeSeparation=yes and Compression=yes not supported", 148 fatal("%s: UsePrivilegeSeparation=yes and Compression=yes not supported",
@@ -160,7 +161,7 @@ mm_xmalloc(struct mm_master *mm, size_t size)
160 161
161 address = mm_malloc(mm, size); 162 address = mm_malloc(mm, size);
162 if (address == NULL) 163 if (address == NULL)
163 fatal("%s: mm_malloc(%lu)", __func__, (u_long)size); 164 fatal("%s: mm_malloc(%zu)", __func__, size);
164 memset(address, 0, size); 165 memset(address, 0, size);
165 return (address); 166 return (address);
166} 167}
@@ -195,7 +196,7 @@ mm_malloc(struct mm_master *mm, size_t size)
195 196
196 /* Does not change order in RB tree */ 197 /* Does not change order in RB tree */
197 mms->size -= size; 198 mms->size -= size;
198 mms->address = (u_char *)mms->address + size; 199 mms->address = (char *)mms->address + size;
199 200
200 if (mms->size == 0) { 201 if (mms->size == 0) {
201 RB_REMOVE(mmtree, &mm->rb_free, mms); 202 RB_REMOVE(mmtree, &mm->rb_free, mms);
@@ -248,8 +249,8 @@ mm_free(struct mm_master *mm, void *address)
248 249
249 /* Check if range does not overlap */ 250 /* Check if range does not overlap */
250 if (prev != NULL && MM_ADDRESS_END(prev) > address) 251 if (prev != NULL && MM_ADDRESS_END(prev) > address)
251 fatal("mm_free: memory corruption: %p(%lu) > %p", 252 fatal("mm_free: memory corruption: %p(%zu) > %p",
252 prev->address, (u_long)prev->size, address); 253 prev->address, prev->size, address);
253 254
254 /* See if we can merge backwards */ 255 /* See if we can merge backwards */
255 if (prev != NULL && MM_ADDRESS_END(prev) == address) { 256 if (prev != NULL && MM_ADDRESS_END(prev) == address) {
@@ -271,8 +272,8 @@ mm_free(struct mm_master *mm, void *address)
271 return; 272 return;
272 273
273 if (MM_ADDRESS_END(prev) > mms->address) 274 if (MM_ADDRESS_END(prev) > mms->address)
274 fatal("mm_free: memory corruption: %p < %p(%lu)", 275 fatal("mm_free: memory corruption: %p < %p(%zu)",
275 mms->address, prev->address, (u_long)prev->size); 276 mms->address, prev->address, prev->size);
276 if (MM_ADDRESS_END(prev) != mms->address) 277 if (MM_ADDRESS_END(prev) != mms->address)
277 return; 278 return;
278 279
@@ -343,12 +344,12 @@ mm_share_sync(struct mm_master **pmm, struct mm_master **pmmalloc)
343void 344void
344mm_memvalid(struct mm_master *mm, void *address, size_t size) 345mm_memvalid(struct mm_master *mm, void *address, size_t size)
345{ 346{
346 void *end = (u_char *)address + size; 347 void *end = (char *)address + size;
347 348
348 if (address < mm->address) 349 if (address < mm->address)
349 fatal("mm_memvalid: address too small: %p", address); 350 fatal("mm_memvalid: address too small: %p", address);
350 if (end < address) 351 if (end < address)
351 fatal("mm_memvalid: end < address: %p < %p", end, address); 352 fatal("mm_memvalid: end < address: %p < %p", end, address);
352 if (end > (void *)((u_char *)mm->address + mm->size)) 353 if (end > MM_ADDRESS_END(mm))
353 fatal("mm_memvalid: address too large: %p", address); 354 fatal("mm_memvalid: address too large: %p", address);
354} 355}