Only copy the received data to user space in recvmsg

Redundant copy may result in dirty data.
This commit is contained in:
He Sun 2020-10-22 11:34:31 +08:00 committed by Zongmin.Gu
parent dd63f0194f
commit 4f02e71160

@ -42,11 +42,13 @@ impl HostSocket {
}; };
let retval = self.do_recvmsg_untrusted_data(&mut u_data, flags, name, control)?; let retval = self.do_recvmsg_untrusted_data(&mut u_data, flags, name, control)?;
let mut copied = 0; let mut remain = retval.0;
for (i, buf) in data.iter_mut().enumerate() { for (i, buf) in data.iter_mut().enumerate() {
if remain >= buf.len() {
buf.copy_from_slice(u_data[i]); buf.copy_from_slice(u_data[i]);
copied += buf.len(); remain -= buf.len();
if copied >= retval.0 { } else {
buf[0..remain].copy_from_slice(&u_data[i][0..remain]);
break; break;
} }
} }