mirror of
https://github.com/espressif/tlsf.git
synced 2025-11-16 12:34:46 +00:00
tlsf: fix input validation of tlsf_t parameter and comment tlsf_fit_size()
This commit is contained in:
17
tlsf.c
17
tlsf.c
@@ -794,11 +794,11 @@ int tlsf_check_pool(pool_t pool)
|
|||||||
size_t tlsf_fit_size(tlsf_t tlsf, size_t size)
|
size_t tlsf_fit_size(tlsf_t tlsf, size_t size)
|
||||||
{
|
{
|
||||||
/* because it's GoodFit, allocable size is one range lower */
|
/* because it's GoodFit, allocable size is one range lower */
|
||||||
if (size)
|
if (size && tlsf != NULL)
|
||||||
{
|
{
|
||||||
size_t sl_interval;
|
size_t sl_interval;
|
||||||
control_t* control = tlsf_cast(control_t*, tlsf);
|
control_t* control = tlsf_cast(control_t*, tlsf);
|
||||||
sl_interval = (1 << ((sizeof(size_t) * 8 - 1) - __builtin_clz(size))) / control->sl_index_count;
|
sl_interval = (1 << (32 - __builtin_clz(size) - 1)) / control->sl_index_count;
|
||||||
return size & ~(sl_interval - 1);
|
return size & ~(sl_interval - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -831,6 +831,10 @@ size_t tlsf_block_size_min(void)
|
|||||||
|
|
||||||
size_t tlsf_block_size_max(tlsf_t tlsf)
|
size_t tlsf_block_size_max(tlsf_t tlsf)
|
||||||
{
|
{
|
||||||
|
if (tlsf == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
control_t* control = tlsf_cast(control_t*, tlsf);
|
control_t* control = tlsf_cast(control_t*, tlsf);
|
||||||
return tlsf_cast(size_t, 1) << control->fl_index_max;
|
return tlsf_cast(size_t, 1) << control->fl_index_max;
|
||||||
}
|
}
|
||||||
@@ -951,15 +955,20 @@ tlsf_t tlsf_create(void* mem, size_t max_bytes)
|
|||||||
#if _DEBUG
|
#if _DEBUG
|
||||||
if (test_ffs_fls())
|
if (test_ffs_fls())
|
||||||
{
|
{
|
||||||
return 0;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (mem == NULL)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (((tlsfptr_t)mem % ALIGN_SIZE) != 0)
|
if (((tlsfptr_t)mem % ALIGN_SIZE) != 0)
|
||||||
{
|
{
|
||||||
printf("tlsf_create: Memory must be aligned to %u bytes.\n",
|
printf("tlsf_create: Memory must be aligned to %u bytes.\n",
|
||||||
(unsigned int)ALIGN_SIZE);
|
(unsigned int)ALIGN_SIZE);
|
||||||
return 0;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
control_t* control_ptr = control_construct(tlsf_cast(control_t*, mem), max_bytes);
|
control_t* control_ptr = control_construct(tlsf_cast(control_t*, mem), max_bytes);
|
||||||
|
|||||||
9
tlsf.h
9
tlsf.h
@@ -46,6 +46,15 @@ size_t tlsf_block_size_min(void);
|
|||||||
size_t tlsf_block_size_max(tlsf_t tlsf);
|
size_t tlsf_block_size_max(tlsf_t tlsf);
|
||||||
size_t tlsf_pool_overhead(void);
|
size_t tlsf_pool_overhead(void);
|
||||||
size_t tlsf_alloc_overhead(void);
|
size_t tlsf_alloc_overhead(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return the allocable size based on the size passed
|
||||||
|
* as parameter
|
||||||
|
*
|
||||||
|
* @param tlsf Pointer to the tlsf structure
|
||||||
|
* @param size The allocation size
|
||||||
|
* @return size_t The updated allocation size
|
||||||
|
*/
|
||||||
size_t tlsf_fit_size(tlsf_t tlsf, size_t size);
|
size_t tlsf_fit_size(tlsf_t tlsf, size_t size);
|
||||||
|
|
||||||
/* Debugging. */
|
/* Debugging. */
|
||||||
|
|||||||
Reference in New Issue
Block a user