lib: c: io: mmap can now reserve a region of memory when called with PROT_NONE

This commit is contained in:
2026-03-21 10:40:44 +00:00
parent 7a00de28a1
commit c340f927bb

View File

@@ -57,6 +57,24 @@ static int get_vmo(
return err;
}
static void *mreserve(kern_handle_t address_space, void *addr, size_t length)
{
virt_addr_t base = (virt_addr_t)addr;
if (!base) {
base = MAP_ADDRESS_ANY;
}
kern_status_t status
= address_space_reserve(address_space, base, length, &base);
if (status != KERN_OK) {
__set_errno(__errno_from_kern_status(status));
return MAP_FAILED;
}
return (void *)base;
}
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)
{
int tmp = 0;
@@ -105,6 +123,12 @@ void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)
return MAP_FAILED;
}
if ((flags & (MAP_ANONYMOUS | MAP_PRIVATE)) && (prot == PROT_NONE)) {
void *ret = mreserve(address_space, addr, length);
kern_handle_close(address_space);
return ret;
}
kern_handle_t vmo = KERN_HANDLE_INVALID;
int err = get_vmo(fd, prot, flags, length, &vmo);
if (err != SUCCESS) {