io: fix buffer overflow in metal_sys_io_mem_map()

In metal_sys_io_mem_map() if the I/O region size
is a multiple of (1<<page_shift) will result in a
buffer overflow in the for loop.

Therefore, adjust loop termination condition to
prevent accessing an out-of-bounds page.

Signed-off-by: Iuliana Prodan <iuliana.prodan@nxp.com>
This commit is contained in:
Iuliana Prodan
2025-02-14 16:40:24 +01:00
committed by Arnaud Pouliquen
parent 465fcf018c
commit 961d0171a6
2 changed files with 2 additions and 2 deletions
+1 -1
View File
@@ -22,7 +22,7 @@ void metal_sys_io_mem_map(struct metal_io_region *io)
if (psize) {
if (psize >> io->page_shift)
psize = (size_t)1 << io->page_shift;
for (p = 0; p <= (io->size >> io->page_shift); p++) {
for (p = 0; p <= ((io->size - 1) >> io->page_shift); p++) {
metal_machine_io_mem_map(va, io->physmap[p],
psize, io->mem_flags);
va += psize;
+1 -1
View File
@@ -22,7 +22,7 @@ void metal_sys_io_mem_map(struct metal_io_region *io)
if (psize) {
if (psize >> io->page_shift)
psize = (size_t)1 << io->page_shift;
for (p = 0; p <= (io->size >> io->page_shift); p++) {
for (p = 0; p <= ((io->size - 1) >> io->page_shift); p++) {
metal_machine_io_mem_map(va, io->physmap[p],
psize, io->mem_flags);
va += psize;