vpnor copy_flash: remove incorrect size check
Remove a read window size check, which essentially mandated that a pnor
partition is at least as large as the window size.
To elaborate, the current mbox implementation assumes a read window size
of 1M. This is as per protocol; a host can even send a read size of 0,
the BMC implementation is responsible for reading what's valid and fits
in the window, and inform host about the size read. There was a check
which would see that a read size of 1M past the requested flash offset
is larger than an actual partition file size (for partitions < 1M), and
would fail the read request. Instead, in such a case, read the entire
partition and inform host about the size read.
Change-Id: I07d4b24d7eb31c5473c4142e96743d8f8d0e08a2
Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
diff --git a/mboxd_flash_virtual.cpp b/mboxd_flash_virtual.cpp
index 182278b..fb4075f 100644
--- a/mboxd_flash_virtual.cpp
+++ b/mboxd_flash_virtual.cpp
@@ -176,18 +176,10 @@
// then size of the partition file then throw error.
uint32_t baseOffset = partitionInfo->data.base << context->block_size_shift;
-
- if ((offset + size) > (baseOffset + partitionInfo->data.actual))
- {
- MSG_ERR("Offset is beyond the partition file length[0x%.8x]\n",
- partitionInfo->data.actual);
- munmap(mapped_mem, partitionInfo->data.actual);
- elog<InternalFailure>();
- }
-
//copy to the reserved memory area
auto diffOffset = offset - baseOffset;
- memcpy(mem, (char*)mapped_mem + diffOffset , size);
+ rc = std::min(partitionInfo->data.actual - diffOffset, size);
+ memcpy(mem, (char*)mapped_mem + diffOffset , rc);
munmap(mapped_mem, partitionInfo->data.actual);
}
}