mirror of
https://github.com/usatiuk/ficus.git
synced 2025-10-29 00:27:52 +01:00
Check for break too big
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user