SGX target: handle empty user buffers correctly
This commit is contained in:
parent
147311c5fc
commit
4c8c0fc1e2
@ -537,7 +537,12 @@ impl UserRef<super::raw::ByteBuffer> {
|
||||
pub fn copy_user_buffer(&self) -> Vec<u8> {
|
||||
unsafe {
|
||||
let buf = self.to_enclave();
|
||||
User::from_raw_parts(buf.data as _, buf.len).to_enclave()
|
||||
if buf.len > 0 {
|
||||
User::from_raw_parts(buf.data as _, buf.len).to_enclave()
|
||||
} else {
|
||||
// Mustn't look at `data` or call `free` if `len` is `0`.
|
||||
Vec::with_capacity(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,8 @@ pub fn read(fd: Fd, buf: &mut [u8]) -> IoResult<usize> {
|
||||
#[unstable(feature = "sgx_platform", issue = "56975")]
|
||||
pub fn read_alloc(fd: Fd) -> IoResult<Vec<u8>> {
|
||||
unsafe {
|
||||
let mut userbuf = alloc::User::<ByteBuffer>::uninitialized();
|
||||
let userbuf = ByteBuffer { data: ::ptr::null_mut(), len: 0 };
|
||||
let mut userbuf = alloc::User::new_from_enclave(&userbuf);
|
||||
raw::read_alloc(fd, userbuf.as_raw_mut_ptr()).from_sgx_result()?;
|
||||
Ok(userbuf.copy_user_buffer())
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user