mirror of
https://github.com/espressif/tlsf.git
synced 2025-11-16 04:24:45 +00:00
Merge pull request #3 from velvitonator/large-alloc-corruption
Protect against large sizes resulting in off-the-end free blocks
This commit is contained in:
12
tlsf.c
12
tlsf.c
@@ -758,7 +758,17 @@ static block_header_t* block_locate_free(control_t* control, size_t size)
|
||||
if (size)
|
||||
{
|
||||
mapping_search(size, &fl, &sl);
|
||||
block = search_suitable_block(control, &fl, &sl);
|
||||
|
||||
/*
|
||||
** mapping_search can futz with the size, so for excessively large sizes it can sometimes wind up
|
||||
** with indices that are off the end of the block array.
|
||||
** So, we protect against that here, since this is the only callsite of mapping_search.
|
||||
** Note that we don't need to check sl, since it comes from a modulo operation that guarantees it's always in range.
|
||||
*/
|
||||
if (fl < FL_INDEX_COUNT)
|
||||
{
|
||||
block = search_suitable_block(control, &fl, &sl);
|
||||
}
|
||||
}
|
||||
|
||||
if (block)
|
||||
|
||||
Reference in New Issue
Block a user