Hello,
Mikhail Karpov, le jeu. 03 sept. 2026 11:51:27 +0700, a ecrit:
> diff --git a/fatfs/dir.c b/fatfs/dir.c
> index 0351552..1b7bfe0 100644
> --- a/fatfs/dir.c
> +++ b/fatfs/dir.c
> @@ -955,10 +955,13 @@ diskfs_get_directs (struct node *dp,
> {
> vm_address_t newdata;
>
> - vm_allocate (mach_task_self (), &newdata,
> - (ouralloc
> - ? (allocsize *= 2)
> - : (allocsize = vm_page_size * 2)), 1);
> + err = vm_allocate (mach_task_self (), &newdata,
> + (ouralloc
> + ? (allocsize *= 2)
> + : (allocsize = vm_page_size * 2)), 1);
> + if (err)
We need to unmap buf.
> + return err;
> +
> memcpy ((void *) newdata, (void *) *data, datap - *data);
>
> if (ouralloc)
> diff --git a/isofs/lookup.c b/isofs/lookup.c
> index 51eabcf..f12c62d 100644
> --- a/isofs/lookup.c
> +++ b/isofs/lookup.c
> @@ -345,10 +345,18 @@ diskfs_get_directs (struct node *dp,
> {
> vm_address_t newdata;
>
> - vm_allocate (mach_task_self (), &newdata,
> - (ouralloc
> - ? (allocsize *= 2)
> - : (allocsize = vm_page_size * 2)), 1);
> + err = vm_allocate (mach_task_self (), &newdata,
> + (ouralloc
> + ? (allocsize *= 2)
> + : (allocsize = vm_page_size * 2)), 1);
> + if (err)
> + {
> + if (ouralloc)
> + munmap (*data, allocsize);
Don't we also need to release rr and end catch_exception, like below
after the calculate_file_start call?
> diff --git a/libdiskfs/io-map-cntl.c b/libdiskfs/io-map-cntl.c
> index 6432fa0..981681f 100644
> --- a/libdiskfs/io-map-cntl.c
> +++ b/libdiskfs/io-map-cntl.c
> @@ -32,11 +32,25 @@ diskfs_S_io_map_cntl (struct protid *cred,
> pthread_mutex_lock (&cred->po->np->lock);
> if (!cred->mapped)
> {
> - default_pager_object_create (diskfs_default_pager,
> &cred->shared_object,
> - __vm_page_size);
> - vm_map (mach_task_self (), (vm_address_t *)&cred->mapped, vm_page_size,
> - 0, 1, cred->shared_object, 0, 0,
> - VM_PROT_READ|VM_PROT_WRITE, VM_PROT_READ|VM_PROT_WRITE, 0);
> + error_t err = default_pager_object_create (diskfs_default_pager,
> + &cred->shared_object,
> + __vm_page_size);
> + if (err)
> + {
> + pthread_mutex_unlock (&cred->po->np->lock);
> + return err;
> + }
> +
> + err = vm_map (mach_task_self (), (vm_address_t *)&cred->mapped,
> + vm_page_size, 0, 1, cred->shared_object, 0, 0,
> + VM_PROT_READ|VM_PROT_WRITE,
> + VM_PROT_READ|VM_PROT_WRITE, 0);
> + if (err)
> + {
We'd want to release and clear cred->shared_object.
Samuel