Change kore_realloc() behaviour a bit.

If kore_realloc() decides that a new block must be allocated it will
explicitly call the new kore_free_zero() function to erase the
contents of the old block once the move is done.
This commit is contained in:
Joris Vink 2023-03-01 16:26:24 +01:00
parent a5342a0120
commit 3e944e106b
2 changed files with 18 additions and 3 deletions

View File

@ -908,6 +908,7 @@ void *kore_calloc(size_t, size_t);
void *kore_realloc(void *, size_t);
void kore_free(void *);
void kore_mem_init(void);
void kore_free_zero(void *);
void kore_mem_cleanup(void);
void kore_mem_untag(void *);
void *kore_mem_lookup(u_int32_t);

View File

@ -123,11 +123,11 @@ kore_realloc(void *ptr, size_t len)
nptr = mem_alloc(len);
} else {
mem = meminfo(ptr);
if (len == mem->len)
if (len <= mem->len)
return (ptr);
nptr = mem_alloc(len);
memcpy(nptr, ptr, MIN(len, mem->len));
kore_free(ptr);
memcpy(nptr, ptr, mem->len);
kore_free_zero(ptr);
}
return (nptr);
@ -149,6 +149,20 @@ kore_calloc(size_t memb, size_t len)
return (ptr);
}
void
kore_free_zero(void *ptr)
{
struct meminfo *mem;
if (ptr == NULL)
return;
mem = meminfo(ptr);
kore_mem_zero(ptr, mem->len);
kore_free(ptr);
}
void
kore_free(void *ptr)
{