Check rxtx node availability before accessing rxtx struct
Make sure that rx_tx-buffer(compatible "arm,ffa-manifest-rx_tx-buffer")
node is available in Partition's manifest before trying to
populate/sanitize rxtx structure's members with memory regions.
Signed-off-by: Manish Pandey <manish.pandey2@arm.com>
Change-Id: I3b6fb6b5618f7edeebc1b89a12f51fcddffa198b
diff --git a/src/manifest.c b/src/manifest.c
index 9db1863..273d445 100644
--- a/src/manifest.c
+++ b/src/manifest.c
@@ -347,21 +347,24 @@
dlog_verbose(" Attributes: %u\n",
mem_regions[i].attributes);
- TRY(read_optional_uint32(mem_node, "phandle",
- (uint32_t)MANIFEST_INVALID_ADDRESS,
- &phandle));
- if (phandle == rxtx->rx_phandle) {
- dlog_verbose(" Assigned as RX buffer\n");
- rxtx->rx_buffer = &mem_regions[i];
- } else if (phandle == rxtx->tx_phandle) {
- dlog_verbose(" Assigned as TX buffer\n");
- rxtx->tx_buffer = &mem_regions[i];
+ if (rxtx->available) {
+ TRY(read_optional_uint32(
+ mem_node, "phandle",
+ (uint32_t)MANIFEST_INVALID_ADDRESS, &phandle));
+ if (phandle == rxtx->rx_phandle) {
+ dlog_verbose(" Assigned as RX buffer\n");
+ rxtx->rx_buffer = &mem_regions[i];
+ } else if (phandle == rxtx->tx_phandle) {
+ dlog_verbose(" Assigned as TX buffer\n");
+ rxtx->tx_buffer = &mem_regions[i];
+ }
}
i++;
} while (fdt_next_sibling(mem_node) && (i < SP_MAX_MEMORY_REGIONS));
- if (rxtx->rx_buffer->page_count != rxtx->tx_buffer->page_count) {
+ if (rxtx->available &&
+ (rxtx->rx_buffer->page_count != rxtx->tx_buffer->page_count)) {
return MANIFEST_ERROR_RXTX_SIZE_MISMATCH;
}