refactor(el3-spmc): spmc_shmem_obj_get_emad() will never fail
Earlier validation ensures spmc_shmem_obj_get_emad() will never fail, so
trip an assertion instead of returning NULL.
Change-Id: I285f3b59150773b2404db5719753fdb240e9ed63
Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
diff --git a/services/std_svc/spm/el3_spmc/spmc_shared_mem.c b/services/std_svc/spm/el3_spmc/spmc_shared_mem.c
index a0c4ed5..1e00982 100644
--- a/services/std_svc/spm/el3_spmc/spmc_shared_mem.c
+++ b/services/std_svc/spm/el3_spmc/spmc_shared_mem.c
@@ -201,19 +201,15 @@
* format, otherwise assume it is a v1.1 format.
*/
if (ffa_version == MAKE_FFA_VERSION(1, 0)) {
- /* Cast our descriptor to the v1.0 format. */
- struct ffa_mtd_v1_0 *mtd_v1_0 =
- (struct ffa_mtd_v1_0 *) desc;
- emad = (uint8_t *) &(mtd_v1_0->emad);
+ emad = (uint8_t *)desc + offsetof(struct ffa_mtd_v1_0, emad);
*emad_size = sizeof(struct ffa_emad_v1_0);
} else {
- if (!is_aligned(desc->emad_offset, 16)) {
- WARN("Emad offset is not aligned.\n");
- return NULL;
- }
+ assert(is_aligned(desc->emad_offset, 16));
emad = ((uint8_t *) desc + desc->emad_offset);
*emad_size = desc->emad_size;
}
+
+ assert(((uint64_t)index * (uint64_t)*emad_size) <= UINT32_MAX);
return (emad + (*emad_size * index));
}
@@ -237,10 +233,6 @@
struct ffa_emad_v1_0 *emad = spmc_shmem_obj_get_emad(&obj->desc, 0,
ffa_version,
&emad_size);
- /* Ensure the emad array was found. */
- if (emad == NULL) {
- return NULL;
- }
/* Ensure the composite descriptor offset is aligned. */
if (!is_aligned(emad->comp_mrd_offset, 8)) {
@@ -814,10 +806,6 @@
emad = spmc_shmem_obj_get_emad(&obj->desc, emad_num,
ffa_version, &emad_size);
- if (emad == NULL) {
- WARN("%s: invalid emad structure.\n", __func__);
- return -EINVAL;
- }
/*
* Validate the calculated emad address resides within the
@@ -1079,10 +1067,6 @@
for (size_t i = 0; i < obj->desc.emad_count; i++) {
emad = spmc_shmem_obj_get_emad(&obj->desc, i, ffa_version,
&emad_size);
- if (emad == NULL) {
- ret = FFA_ERROR_INVALID_PARAMETER;
- goto err_bad_desc;
- }
ffa_endpoint_id16_t ep_id = emad->mapd.endpoint_id;
@@ -1100,18 +1084,11 @@
for (size_t i = 0; i < obj->desc.emad_count; i++) {
emad = spmc_shmem_obj_get_emad(&obj->desc, i, ffa_version,
&emad_size);
- if (emad == NULL) {
- ret = FFA_ERROR_INVALID_PARAMETER;
- goto err_bad_desc;
- }
+
for (size_t j = i + 1; j < obj->desc.emad_count; j++) {
other_emad = spmc_shmem_obj_get_emad(&obj->desc, j,
ffa_version,
&emad_size);
- if (other_emad == NULL) {
- ret = FFA_ERROR_INVALID_PARAMETER;
- goto err_bad_desc;
- }
if (emad->mapd.endpoint_id ==
other_emad->mapd.endpoint_id) {
@@ -1578,11 +1555,6 @@
emad = spmc_shmem_obj_get_emad(req, i, ffa_version,
&emad_size);
- if (emad == NULL) {
- WARN("%s: invalid emad structure.\n", __func__);
- ret = FFA_ERROR_INVALID_PARAMETER;
- goto err_unlock_all;
- }
if ((uintptr_t) emad >= (uintptr_t)
((uint8_t *) req + total_length)) {
@@ -1606,21 +1578,12 @@
emad = spmc_shmem_obj_get_emad(req, i, ffa_version,
&emad_size);
- if (emad == NULL) {
- ret = FFA_ERROR_INVALID_PARAMETER;
- goto err_unlock_all;
- }
for (size_t j = 0; j < obj->desc.emad_count; j++) {
other_emad = spmc_shmem_obj_get_emad(
&obj->desc, j, MAKE_FFA_VERSION(1, 1),
&emad_size);
- if (other_emad == NULL) {
- ret = FFA_ERROR_INVALID_PARAMETER;
- goto err_unlock_all;
- }
-
if (req->emad_count &&
emad->mapd.endpoint_id ==
other_emad->mapd.endpoint_id) {