summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenri Chataing <henrichataing@google.com>2024-03-14 17:34:09 +0000
committerHenri Chataing <henrichataing@google.com>2024-03-14 17:56:41 +0000
commit812a9cca372dc116ba2d7411277997fcc26ffcef (patch)
treea47520f06d1fe5408444a9bf32a68032f6fd31fd
parentb48caec4723ebfcf4f9d7b6549711e92e41e9f60 (diff)
downloaduwb-812a9cca372dc116ba2d7411277997fcc26ffcef.tar.gz
uci_hal_android: Validate the number of bytes sent by SendUciMessage
UciHalAndroid::send_packet ignores the return value of sendUciMessage. From the aidl specification of IUwbChip: > This method may queue writes and return immediately, or it may block > until data is written. Implementation must guarantee that writes are > executed in order. > @return number of bytes written to the UWB Subsystem Bug: 329316454 Test: TreeHugger Change-Id: I0fabd162a3278739e35c851a8b384fe85c298080
-rw-r--r--src/rust/uci_hal_android/uci_hal_android.rs13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/rust/uci_hal_android/uci_hal_android.rs b/src/rust/uci_hal_android/uci_hal_android.rs
index 0dd4c0b..aa41875 100644
--- a/src/rust/uci_hal_android/uci_hal_android.rs
+++ b/src/rust/uci_hal_android/uci_hal_android.rs
@@ -262,11 +262,20 @@ impl UciHal for UciHalAndroid {
async fn send_packet(&mut self, packet: UciHalPacket) -> UwbCoreResult<()> {
match &self.hal_uci_recipient {
Some(i_uwb_chip) => {
- i_uwb_chip
+ let bytes_written = i_uwb_chip
.sendUciMessage(&packet)
.await
.map_err(|e| UwbCoreError::from(Error::from(e)))?;
- Ok(())
+ if bytes_written != packet.len() as i32 {
+ log::error!(
+ "sendUciMessage did not write the full packet: {} != {}",
+ bytes_written,
+ packet.len()
+ );
+ Err(UwbCoreError::PacketTxError)
+ } else {
+ Ok(())
+ }
}
None => Err(UwbCoreError::BadParameters),
}