Check for break too big

This commit is contained in:
2024-04-06 23:12:42 +02:00
parent b9aa97f863
commit 9e53a0de33
2 changed files with 7 additions and 2 deletions

View File

@@ -217,12 +217,16 @@ char *syscall_sbrk(int brk) {
if (!vma) return reinterpret_cast<char *>(-1);
if (!vma->brk_start) {
vma->brk_start = (char *) vma->mmap_mem(nullptr, 16ULL * 1024ULL * 1024ULL /* 16MB */, 0, PAGE_RW | PAGE_USER);
vma->brk_start = (char *) vma->mmap_mem(nullptr, VMA::kBrkSize /* 16MB */, 0, PAGE_RW | PAGE_USER);
if (!vma->brk_start) return reinterpret_cast<char *>(-1); // FIXME:
vma->brk_end_real = *vma->brk_start + 16ULL * 1024ULL * 1024ULL;
vma->brk_end_real = *vma->brk_start + VMA::kBrkSize;
vma->brk_end_fake = vma->brk_start;
}
if (*vma->brk_end_fake + brk >= *vma->brk_start + VMA::kBrkSize) {
return ret;
}
ret = *vma->brk_end_fake;
vma->brk_end_fake = *vma->brk_end_fake + brk;

View File

@@ -32,6 +32,7 @@ public:
void *mmap_mem(void *v_addr, size_t length, int prot, int flags);
int munmap(void *addr, size_t length);
static constexpr size_t kBrkSize = 16ULL*1024ULL*1024ULL;
std::optional<char*> brk_start;
std::optional<char*> brk_end_fake;
std::optional<char*> brk_end_real;