Eliminate an unneeded reference on a vm object. If, in fact, the nearby
vm_map_find() fails, then the excess reference causes the vm object to be leaked. Reviewed by: tegge
This commit is contained in:
parent
4167396552
commit
45e31b6034
@ -704,7 +704,6 @@ link_elf_load_file(linker_class_t cls, const char* filename,
|
||||
error = ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
vm_object_reference(ef->object);
|
||||
ef->address = (caddr_t) vm_map_min(kernel_map);
|
||||
error = vm_map_find(kernel_map, ef->object, 0,
|
||||
(vm_offset_t *) &ef->address,
|
||||
@ -884,7 +883,6 @@ link_elf_unload_file(linker_file_t file)
|
||||
vm_map_remove(kernel_map, (vm_offset_t) ef->address,
|
||||
(vm_offset_t) ef->address
|
||||
+ (ef->object->size << PAGE_SHIFT));
|
||||
vm_object_deallocate(ef->object);
|
||||
}
|
||||
#else
|
||||
if (ef->address)
|
||||
|
@ -640,7 +640,6 @@ link_elf_load_file(linker_class_t cls, const char *filename,
|
||||
error = ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
vm_object_reference(ef->object);
|
||||
ef->address = (caddr_t) vm_map_min(kernel_map);
|
||||
error = vm_map_find(kernel_map, ef->object, 0, &mapbase,
|
||||
round_page(mapsize), TRUE, VM_PROT_ALL, VM_PROT_ALL, FALSE);
|
||||
@ -828,7 +827,6 @@ link_elf_unload_file(linker_file_t file)
|
||||
vm_map_remove(kernel_map, (vm_offset_t) ef->address,
|
||||
(vm_offset_t) ef->address +
|
||||
(ef->object->size << PAGE_SHIFT));
|
||||
vm_object_deallocate(ef->object);
|
||||
}
|
||||
if (ef->e_shdr)
|
||||
free(ef->e_shdr, M_LINKER);
|
||||
|
Loading…
x
Reference in New Issue
Block a user