Skip to content

Commit 40d6aa9

Browse files
committed
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>
1 parent 21ee3c3 commit 40d6aa9

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

kernel/mem_slab.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,12 @@ static int create_free_list(struct k_mem_slab *slab)
114114
slab->free_list = NULL;
115115
p = slab->buffer + slab->info.block_size * (slab->info.num_blocks - 1);
116116

117-
while (p >= slab->buffer) {
117+
for (int i = slab->info.num_blocks - 1; i >= 0; i--) {
118118
*(char **)p = slab->free_list;
119119
slab->free_list = p;
120120
p -= slab->info.block_size;
121121
}
122+
122123
return 0;
123124
}
124125

0 commit comments

Comments
 (0)