[libos] Add iov buffer check for readv and writev

Signed-off-by: Qi Zheng <huaiqing.zq@antgroup.com>
This commit is contained in:
Qi Zheng 2023-12-29 16:55:57 +08:00 committed by volcano
parent d4de8f59e6
commit 9b6cb4d27f

@ -167,9 +167,12 @@ fn do_writev_offset(
for iov_i in 0..count { for iov_i in 0..count {
let iov_ptr = unsafe { iov.offset(iov_i as isize) }; let iov_ptr = unsafe { iov.offset(iov_i as isize) };
let iov = unsafe { &*iov_ptr }; let iov = unsafe { &*iov_ptr };
if iov.len != 0 {
from_user::check_array(iov.base as *const u8, iov.len)?;
let buf = unsafe { std::slice::from_raw_parts(iov.base as *const u8, iov.len) }; let buf = unsafe { std::slice::from_raw_parts(iov.base as *const u8, iov.len) };
bufs_vec.push(buf); bufs_vec.push(buf);
} }
}
bufs_vec bufs_vec
}; };
let bufs = &bufs_vec[..]; let bufs = &bufs_vec[..];
@ -206,9 +209,12 @@ fn do_readv_offset(
for iov_i in 0..count { for iov_i in 0..count {
let iov_ptr = unsafe { iov.offset(iov_i as isize) }; let iov_ptr = unsafe { iov.offset(iov_i as isize) };
let iov = unsafe { &*iov_ptr }; let iov = unsafe { &*iov_ptr };
if iov.len != 0 {
from_user::check_mut_array(iov.base as *mut u8, iov.len)?;
let buf = unsafe { std::slice::from_raw_parts_mut(iov.base as *mut u8, iov.len) }; let buf = unsafe { std::slice::from_raw_parts_mut(iov.base as *mut u8, iov.len) };
bufs_vec.push(buf); bufs_vec.push(buf);
} }
}
bufs_vec bufs_vec
}; };
let bufs = &mut bufs_vec[..]; let bufs = &mut bufs_vec[..];