From ca082f686fd2dc7ee6f0284421f6212d6d4acee8 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Thu, 11 Apr 2024 17:22:00 +0200 Subject: bug fixes --- kernel/fs/shm.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'kernel/fs/shm.c') diff --git a/kernel/fs/shm.c b/kernel/fs/shm.c index 7eec825..2a2995b 100644 --- a/kernel/fs/shm.c +++ b/kernel/fs/shm.c @@ -54,9 +54,17 @@ vfs_vm_object_t *shm_get_vm_object(u64 length, u64 offset, vfs_fd_t *fd) { int shm_ftruncate(vfs_fd_t *fd, size_t length) { vfs_vm_object_t *p = fd->inode->internal_object; + if (p->real_pointer) { + u8 *mem_region = p->real_pointer; + mmu_free_address_range(mem_region, align_page(p->size), NULL); + } + + p->real_pointer = mmu_find_unallocated_virtual_range(NULL, length); + mmu_allocate_region(p->real_pointer, length, MMU_FLAG_RW, NULL); p->size = length; - p->real_pointer = krealloc(p->real_pointer, length + 0x2000); - p->virtual_object = align_page(p->real_pointer); + + p->virtual_object = p->real_pointer; + int n = (uintptr_t)align_page((void *)(u32)length) / 0x1000; p->object = krealloc(p->object, sizeof(void *) * n); for (int i = 0; i < n; i++) { @@ -72,8 +80,6 @@ int shm_open(const char *name, int oflag, mode_t mode) { vfs_vm_object_t *internal_object = hashmap_get_entry(shared_memory_objects, name); if (!internal_object) { - // if (!(oflag & O_CREAT)) - // return -EMFILE; internal_object = kcalloc(1, sizeof(vfs_vm_object_t)); hashmap_add_entry(shared_memory_objects, name, internal_object, NULL, 0); } -- cgit v1.2.3