mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 06:02:44 +00:00 
			
		
		
		
	LibJS: Never give back virtual memory once it belongs to a cell type
Instead of returning HeapBlock memory to the kernel (or a non-type specific shared cache), we now keep a BlockAllocator per CellAllocator and implement "deallocation" by basically informing the kernel that we don't need the physical memory right now. This is done with MADV_FREE or MADV_DONTNEED if available, but for other platforms (including SerenityOS) we munmap and then re-mmap the memory to achieve the same effect. It's definitely clunky, so I've added a FIXME about implementing the madvise options on SerenityOS too. The important outcome of this change is that GC types that use a type-specific allocator become immune to use-after-free type confusion attacks, since their virtual addresses will only ever be re-used for the same exact type again and again. Fixes #22274
This commit is contained in:
		
							parent
							
								
									bcb1e548f1
								
							
						
					
					
						commit
						b6d4eea7ac
					
				
					 10 changed files with 47 additions and 36 deletions
				
			
		|  | @ -26,7 +26,7 @@ NonnullOwnPtr<HeapBlock> HeapBlock::create_with_cell_size(Heap& heap, CellAlloca | |||
| #else | ||||
|     char const* name = nullptr; | ||||
| #endif | ||||
|     auto* block = static_cast<HeapBlock*>(heap.block_allocator().allocate_block(name)); | ||||
|     auto* block = static_cast<HeapBlock*>(cell_allocator.block_allocator().allocate_block(name)); | ||||
|     new (block) HeapBlock(heap, cell_allocator, cell_size); | ||||
|     return NonnullOwnPtr<HeapBlock>(NonnullOwnPtr<HeapBlock>::Adopt, *block); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling