diff options
author | Henri Chataing <henrichataing@google.com> | 2024-03-14 17:34:09 +0000 |
---|---|---|
committer | Henri Chataing <henrichataing@google.com> | 2024-03-14 17:56:41 +0000 |
commit | 812a9cca372dc116ba2d7411277997fcc26ffcef (patch) | |
tree | a47520f06d1fe5408444a9bf32a68032f6fd31fd | |
parent | b48caec4723ebfcf4f9d7b6549711e92e41e9f60 (diff) | |
download | uwb-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.rs | 13 |
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), } |