]> git.corax.cc Git - corax/commitdiff
Make sure _pg_dir_xfer() doesn't copy more data than was requested
authorMatthias Kruk <m@m10k.eu>
Thu, 26 Dec 2019 05:46:48 +0000 (14:46 +0900)
committerMatthias Kruk <m@m10k.eu>
Thu, 26 Dec 2019 05:46:48 +0000 (14:46 +0900)
kernel/arch/paging.c

index e31b0d2201ace236c5d3698e18b9aff675c5fab4..bf944a73e51865e7fdf186c1807b0a62b2c1d500 100644 (file)
@@ -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;