Commit baf09d8a authored by Hui Su's avatar Hui Su

limit single memory allocation to be less than 8 GB

Observed max single allocation of ~500 M when encoding 1080p.
8 G should be good for up to 8K input.

BUG=aomedia:854

Change-Id: Ibf21ecbafb252410d12a8e167c603e98baaa11bc
parent ea35e65f
......@@ -18,6 +18,21 @@
#include "include/aom_mem_intrnl.h"
#include "aom/aom_integer.h"
#ifndef AOM_MAX_ALLOCABLE_MEMORY
#define AOM_MAX_ALLOCABLE_MEMORY 8589934592 // 8 GB
#endif
#if defined(AOM_MAX_ALLOCABLE_MEMORY)
// Returns 0 in case of overflow of nmemb * size.
static int check_size_argument_overflow(uint64_t nmemb, uint64_t size) {
const uint64_t total_size = nmemb * size;
if (nmemb == 0) return 1;
if (size > AOM_MAX_ALLOCABLE_MEMORY / nmemb) return 0;
if (total_size != (size_t)total_size) return 0;
return 1;
}
#endif
static size_t GetAlignedMallocSize(size_t size, size_t align) {
return size + align - 1 + ADDRESS_STORAGE_SIZE;
}
......@@ -40,6 +55,9 @@ static void *GetActualMallocAddress(void *const mem) {
void *aom_memalign(size_t align, size_t size) {
void *x = NULL;
const size_t aligned_size = GetAlignedMallocSize(size, align);
#if defined(AOM_MAX_ALLOCABLE_MEMORY)
if (!check_size_argument_overflow(1, aligned_size)) return NULL;
#endif
void *const addr = malloc(aligned_size);
if (addr) {
x = align_addr((unsigned char *)addr + ADDRESS_STORAGE_SIZE, align);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment