Fix wrong assert in recvmsg for MSG_TRUNC flag
This commit is contained in:
parent
bbb52f6990
commit
71475c3e96
@ -82,7 +82,7 @@ impl SocketFile {
|
|||||||
let msg_control = msg_control as *mut c_void;
|
let msg_control = msg_control as *mut c_void;
|
||||||
let mut msg_controllen_recvd = 0;
|
let mut msg_controllen_recvd = 0;
|
||||||
// Flags
|
// Flags
|
||||||
let flags = flags.bits();
|
let raw_flags = flags.bits();
|
||||||
let mut msg_flags_recvd = 0;
|
let mut msg_flags_recvd = 0;
|
||||||
|
|
||||||
// Do OCall
|
// Do OCall
|
||||||
@ -100,7 +100,7 @@ impl SocketFile {
|
|||||||
msg_controllen,
|
msg_controllen,
|
||||||
&mut msg_controllen_recvd as *mut usize,
|
&mut msg_controllen_recvd as *mut usize,
|
||||||
&mut msg_flags_recvd as *mut i32,
|
&mut msg_flags_recvd as *mut i32,
|
||||||
flags,
|
raw_flags,
|
||||||
);
|
);
|
||||||
assert!(status == sgx_status_t::SGX_SUCCESS);
|
assert!(status == sgx_status_t::SGX_SUCCESS);
|
||||||
|
|
||||||
@ -109,6 +109,8 @@ impl SocketFile {
|
|||||||
retval
|
retval
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let flags_recvd = MsgHdrFlags::from_bits(msg_flags_recvd).unwrap();
|
||||||
|
|
||||||
// Check values returned from outside the enclave
|
// Check values returned from outside the enclave
|
||||||
let bytes_recvd = {
|
let bytes_recvd = {
|
||||||
// Guarantted by try_libc!
|
// Guarantted by try_libc!
|
||||||
@ -117,14 +119,19 @@ impl SocketFile {
|
|||||||
|
|
||||||
// Check bytes_recvd returned from outside the enclave
|
// Check bytes_recvd returned from outside the enclave
|
||||||
let max_bytes_recvd = data.iter().map(|x| x.len()).sum();
|
let max_bytes_recvd = data.iter().map(|x| x.len()).sum();
|
||||||
assert!(retval <= max_bytes_recvd);
|
|
||||||
|
// For MSG_TRUNC recvmsg returns the real length of the packet or datagram,
|
||||||
|
// even when it was longer than the passed buffer.
|
||||||
|
if flags.contains(RecvFlags::MSG_TRUNC) && retval > max_bytes_recvd {
|
||||||
|
assert!(flags_recvd.contains(MsgHdrFlags::MSG_TRUNC));
|
||||||
|
} else {
|
||||||
|
assert!(retval <= max_bytes_recvd);
|
||||||
|
}
|
||||||
retval
|
retval
|
||||||
};
|
};
|
||||||
let msg_namelen_recvd = msg_namelen_recvd as usize;
|
let msg_namelen_recvd = msg_namelen_recvd as usize;
|
||||||
assert!(msg_namelen_recvd <= msg_namelen);
|
assert!(msg_namelen_recvd <= msg_namelen);
|
||||||
assert!(msg_controllen_recvd <= msg_controllen);
|
assert!(msg_controllen_recvd <= msg_controllen);
|
||||||
let flags_recvd = MsgHdrFlags::from_bits(msg_flags_recvd).unwrap();
|
|
||||||
|
|
||||||
Ok((
|
Ok((
|
||||||
bytes_recvd,
|
bytes_recvd,
|
||||||
msg_namelen_recvd,
|
msg_namelen_recvd,
|
||||||
|
Loading…
Reference in New Issue
Block a user