int errno_save;
u64 *chunk_offsets = NULL;
+ u8 *_ubuf = NULL;
u8 *ubuf = NULL;
void *cbuf = NULL;
bool chunk_offsets_malloced = false;
/* Allocate buffer for holding the uncompressed data of each chunk. */
if (chunk_size <= STACK_MAX) {
- ubuf = alloca(chunk_size);
+ _ubuf = alloca(chunk_size + 15);
} else {
- ubuf = MALLOC(chunk_size);
- if (ubuf == NULL)
+ _ubuf = MALLOC(chunk_size + 15);
+ if (_ubuf == NULL)
goto oom;
ubuf_malloced = true;
}
+ ubuf = (u8 *)(((uintptr_t)_ubuf + 15) & ~15);
/* Allocate a temporary buffer for reading compressed chunks, each of
* which can be at most @chunk_size - 1 bytes. This excludes compressed
if (chunk_offsets_malloced)
FREE(chunk_offsets);
if (ubuf_malloced)
- FREE(ubuf);
+ FREE(_ubuf);
if (cbuf_malloced)
FREE(cbuf);
errno = errno_save;