summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike McTernan <mikemcternan@google.com>2024-02-16 04:56:59 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2024-02-16 04:56:59 +0000
commit97e090fbf0e204533d88aecdc45802955ddb3361 (patch)
tree078ed00ac6910eaaf7f1d916c9fbb3ff53aee868
parentcfe21b08e64f7c535734f2d117b31fc8d0b9a810 (diff)
parent6d47ef7bcec49d67a5f12a856f47ccdf888ffff4 (diff)
downloadtrusty-97e090fbf0e204533d88aecdc45802955ddb3361.tar.gz
trusty: ipc_msg: don't touch the iov if num_iov is 0 am: 6d47ef7bce
Original change: https://android-review.googlesource.com/c/trusty/lk/trusty/+/2919787 Change-Id: I360044b00670cdccf982ac870e97965377ea15f6 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--lib/trusty/ipc_msg.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/trusty/ipc_msg.c b/lib/trusty/ipc_msg.c
index f8d595b..1842811 100644
--- a/lib/trusty/ipc_msg.c
+++ b/lib/trusty/ipc_msg.c
@@ -396,7 +396,7 @@ static int kern_msg_read_locked(struct ipc_msg_queue* mq,
int32_t msg_id,
uint32_t offset,
struct ipc_msg_kern* kmsg) {
- int ret;
+ int ret = 0;
struct msg_item* item;
item = msg_check_read_item(mq, msg_id, offset);
@@ -406,10 +406,12 @@ static int kern_msg_read_locked(struct ipc_msg_queue* mq,
const uint8_t* buf = msg_queue_get_buf(mq, item) + offset;
size_t bytes_left = item->len - offset;
- ret = membuf_to_kern_iovec((const struct iovec_kern*)kmsg->iov,
- kmsg->num_iov, buf, bytes_left);
- if (ret < 0)
- return ret;
+ if (likely(kmsg->num_iov)) {
+ ret = membuf_to_kern_iovec((const struct iovec_kern*)kmsg->iov,
+ kmsg->num_iov, buf, bytes_left);
+ if (ret < 0)
+ return ret;
+ }
uint hcnt = MIN(kmsg->num_handles, item->num_handles);
for (uint i = 0; i < hcnt; i++) {