From 7662808bc92271bbd5c9d6fad27301055f7e00ce Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 13 Oct 2022 12:53:33 +0100 Subject: [PATCH] Add `overflow_add` checks to `alloc_from_memory_block` --- core/mem/virtual/virtual.odin | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/core/mem/virtual/virtual.odin b/core/mem/virtual/virtual.odin index e023b2324..b209d06e4 100644 --- a/core/mem/virtual/virtual.odin +++ b/core/mem/virtual/virtual.odin @@ -1,6 +1,7 @@ package mem_virtual import "core:mem" +import "core:intrinsics" DEFAULT_PAGE_SIZE := uint(4096) @@ -134,11 +135,14 @@ alloc_from_memory_block :: proc(block: ^Memory_Block, min_size, alignment: uint) return nil } - alignment_offset := calc_alignment_offset(block, uintptr(alignment)) - size := uint(min_size) + alignment_offset + size, size_ok := intrinsics.overflow_add(min_size, alignment_offset) + if !size_ok { + err = .Out_Of_Memory + return + } - if block.used + size > block.reserved { + if to_be_used, ok := intrinsics.overflow_add(block.used, size); !ok || to_be_used > block.reserved { err = .Out_Of_Memory return }