tpm: handle short write
There is no guarantee that the write can send the whole buffer at once.
In those rare occasions, we should return a sensible error.
@@ -208,7 +208,7 @@ impl Emulator {
buf.extend(converted_req);
debug!("full Control request {:02X?}", buf);
- let _res = self.control_socket.write(&buf).map_err(|e| {
+ let written = self.control_socket.write(&buf).map_err(|e| {
Error::RunControlCmd(anyhow!(
"Failed while running {:02X?} Control Cmd. Error: {:?}",
cmd,
@@ -216,6 +216,13 @@ impl Emulator {
))
})?;
+ if written < buf.len() {
+ return Err(Error::RunControlCmd(anyhow!(
+ "Truncated write while running {:02X?} Control Cmd",
+ cmd,
+ )));
+ }
+
// The largest response is 16 bytes so far.
if msg_len_out > 16 {
return Err(Error::RunControlCmd(anyhow!(
