Browse Source

kernel: memslab: Prevent pointer underflow in free list init

The "p -= slab->info.block_size;" is causing the "p" pointer
to be underflow in RX architecture case, where the RAM address
start from 0x0, in some case p minus block size make it underflow
This change implementation uses an index-based reverse loop to
safely iterate over each block from last to first.

Signed-off-by: Duy Nguyen <duy.nguyen.xa@renesas.com>
pull/92244/head
Duy Nguyen 3 weeks ago committed by Benjamin Cabé
parent
commit
8b0871c5e5
  1. 3
      kernel/mem_slab.c

3
kernel/mem_slab.c

@ -114,11 +114,12 @@ static int create_free_list(struct k_mem_slab *slab) @@ -114,11 +114,12 @@ static int create_free_list(struct k_mem_slab *slab)
slab->free_list = NULL;
p = slab->buffer + slab->info.block_size * (slab->info.num_blocks - 1);
while (p >= slab->buffer) {
for (int i = slab->info.num_blocks - 1; i >= 0; i--) {
*(char **)p = slab->free_list;
slab->free_list = p;
p -= slab->info.block_size;
}
return 0;
}

Loading…
Cancel
Save