From 9979981a29deae8256c4b3d241c475dc44df6bdb Mon Sep 17 00:00:00 2001 From: Iuliana Prodan Date: Thu, 6 Feb 2025 14:00:47 +0200 Subject: [PATCH] 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< --- lib/system/freertos/io.c | 2 +- lib/system/generic/io.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/system/freertos/io.c b/lib/system/freertos/io.c index 319322c7..5e4e2f9d 100644 --- a/lib/system/freertos/io.c +++ b/lib/system/freertos/io.c @@ -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; diff --git a/lib/system/generic/io.c b/lib/system/generic/io.c index 966bfc56..6fc5bb60 100644 --- a/lib/system/generic/io.c +++ b/lib/system/generic/io.c @@ -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;