From: Matthias Kruk Date: Thu, 26 Dec 2019 05:46:48 +0000 (+0900) Subject: Make sure _pg_dir_xfer() doesn't copy more data than was requested X-Git-Url: https://git.corax.cc/?a=commitdiff_plain;h=7f6d942fcddd28c26ef3807db113644206a7dac0;p=corax Make sure _pg_dir_xfer() doesn't copy more data than was requested --- diff --git a/kernel/arch/paging.c b/kernel/arch/paging.c index e31b0d2..bf944a7 100644 --- a/kernel/arch/paging.c +++ b/kernel/arch/paging.c @@ -577,6 +577,12 @@ int _pg_dir_xfer(struct pagedir *ddir, void *dvaddr, srem = spsize - ((u32_t)spaddr & (spsize - 1)); ret_val = drem < srem ? drem : srem; + + /* make sure we don't copy more than requested */ + if(bytes < ret_val) { + ret_val = bytes; + } + memcpy(dpaddr, spaddr, ret_val); gtfo: @@ -933,6 +939,8 @@ int _clone_kernel_region(pg_dir_t *kdir, region_t *reg, void *data) switch(reg->reg_type) { case REGION_TEXT: case REGION_BSS: + case REGION_DATA: + case REGION_RODATA: ret_val = pg_dir_map_region(dir, kdir, reg); break;