X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2Ffiledisk.c;h=bf1aaf852dee15115e73b531bf74d55219d8b7b9;hb=f88a692d094459f0326c5c891df5ea81b5476ba6;hp=629b4ed22c8c9fdb14767a16d5043bbb5d31a990;hpb=ba178554a5f6714e5ceb7b77df462ac72de90b0c;p=palacios-OLD.git diff --git a/palacios/src/devices/filedisk.c b/palacios/src/devices/filedisk.c index 629b4ed..bf1aaf8 100644 --- a/palacios/src/devices/filedisk.c +++ b/palacios/src/devices/filedisk.c @@ -23,7 +23,7 @@ #include #include -#ifndef CONFIG_DEBUG_FILEDISK +#ifndef V3_CONFIG_DEBUG_FILEDISK #undef PrintDebug #define PrintDebug(fmt, args...) #endif @@ -80,6 +80,12 @@ static int read(uint8_t * buf, uint64_t lba, uint64_t num_bytes, void * private_ PrintDebug("Reading %d bytes from %p to %p\n", (uint32_t)num_bytes, (uint8_t *)(disk->disk_image + lba), buf); + if (lba + num_bytes > disk->capacity) { + PrintError("Out of bounds read: lba=%llu, num_bytes=%llu, capacity=%llu\n", + lba, num_bytes, disk->capacity); + return -1; + } + return read_all(disk->fd, buf, lba, num_bytes); } @@ -89,6 +95,13 @@ static int write(uint8_t * buf, uint64_t lba, uint64_t num_bytes, void * private PrintDebug("Writing %d bytes from %p to %p\n", (uint32_t)num_bytes, buf, (uint8_t *)(disk->disk_image + lba)); + if (lba + num_bytes > disk->capacity) { + PrintError("Out of bounds read: lba=%llu, num_bytes=%llu, capacity=%llu\n", + lba, num_bytes, disk->capacity); + return -1; + } + + return write_all(disk->fd, buf, lba, num_bytes); } @@ -96,7 +109,7 @@ static int write(uint8_t * buf, uint64_t lba, uint64_t num_bytes, void * private static uint64_t get_capacity(void * private_data) { struct disk_state * disk = (struct disk_state *)private_data; - PrintDebug("Querying RAMDISK capacity %d\n", + PrintDebug("Querying FILEDISK capacity %d\n", (uint32_t)(disk->capacity)); return disk->capacity;