mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-23 21:44:15 +00:00
fix(el3-spmc): use version-dependent minimum descriptor length
A v1.1 descriptor has a minimum length exceeding that of a v1.0 descriptor. Change-Id: I06265d58f53eccb0d39927fe9ff396b73735df97 Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
This commit is contained in:
parent
eef12e2655
commit
52d8d506e7
1 changed files with 14 additions and 6 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2022, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2022-2023, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -1142,6 +1142,7 @@ long spmc_ffa_mem_send(uint32_t smc_fid,
|
||||||
struct mailbox *mbox = spmc_get_mbox_desc(secure_origin);
|
struct mailbox *mbox = spmc_get_mbox_desc(secure_origin);
|
||||||
ffa_mtd_flag32_t mtd_flag;
|
ffa_mtd_flag32_t mtd_flag;
|
||||||
uint32_t ffa_version = get_partition_ffa_version(secure_origin);
|
uint32_t ffa_version = get_partition_ffa_version(secure_origin);
|
||||||
|
size_t min_desc_size;
|
||||||
|
|
||||||
if (address != 0U || page_count != 0U) {
|
if (address != 0U || page_count != 0U) {
|
||||||
WARN("%s: custom memory region for message not supported.\n",
|
WARN("%s: custom memory region for message not supported.\n",
|
||||||
|
@ -1156,11 +1157,18 @@ long spmc_ffa_mem_send(uint32_t smc_fid,
|
||||||
FFA_ERROR_INVALID_PARAMETER);
|
FFA_ERROR_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if (ffa_version == MAKE_FFA_VERSION(1, 0)) {
|
||||||
* Check if the descriptor is smaller than the v1.0 descriptor. The
|
min_desc_size = sizeof(struct ffa_mtd_v1_0);
|
||||||
* descriptor cannot be smaller than this structure.
|
} else if (ffa_version == MAKE_FFA_VERSION(1, 1)) {
|
||||||
*/
|
min_desc_size = sizeof(struct ffa_mtd);
|
||||||
if (fragment_length < sizeof(struct ffa_mtd_v1_0)) {
|
} else {
|
||||||
|
WARN("%s: bad FF-A version.\n", __func__);
|
||||||
|
return spmc_ffa_error_return(handle,
|
||||||
|
FFA_ERROR_INVALID_PARAMETER);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check if the descriptor is too small for the FF-A version. */
|
||||||
|
if (fragment_length < min_desc_size) {
|
||||||
WARN("%s: bad first fragment size %u < %zu\n",
|
WARN("%s: bad first fragment size %u < %zu\n",
|
||||||
__func__, fragment_length, sizeof(struct ffa_mtd_v1_0));
|
__func__, fragment_length, sizeof(struct ffa_mtd_v1_0));
|
||||||
return spmc_ffa_error_return(handle,
|
return spmc_ffa_error_return(handle,
|
||||||
|
|
Loading…
Add table
Reference in a new issue