diff --git a/arch/arm64/kvm/hyp/nvhe/alloc.c b/arch/arm64/kvm/hyp/nvhe/alloc.c index 491baf86db57..82041e685205 100644 --- a/arch/arm64/kvm/hyp/nvhe/alloc.c +++ b/arch/arm64/kvm/hyp/nvhe/alloc.c @@ -552,6 +552,12 @@ void *hyp_alloc(size_t size) size_t missing_map; int ret = 0; + /* constrained by chunk_hdr *_size types */ + if (size > U32_MAX) { + ret = -E2BIG; + goto end_unlocked; + } + size = ALIGN(size ?: MIN_ALLOC, MIN_ALLOC); hyp_spin_lock(&allocator->lock); @@ -587,9 +593,11 @@ void *hyp_alloc(size_t size) } WARN_ON(chunk_install(chunk, size, last_chunk, allocator)); + end: hyp_spin_unlock(&allocator->lock); +end_unlocked: *(this_cpu_ptr(&hyp_allocator_errno)) = ret; /* Enforce zeroing allocated memory */