diff options
author | Zach Reizner <zachr@google.com> | 2019-02-13 17:33:32 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-02-28 03:24:24 -0800 |
commit | a60744b42ee2589e9318029cf3fd7d87fd73f29d (patch) | |
tree | 4819c7b24caab92956d95474e638eb067a5ce926 /src/main.rs | |
parent | b7196e2a1c1eb7123e7eace5418b7eb4a3e24dbe (diff) | |
download | crosvm-a60744b42ee2589e9318029cf3fd7d87fd73f29d.tar crosvm-a60744b42ee2589e9318029cf3fd7d87fd73f29d.tar.gz crosvm-a60744b42ee2589e9318029cf3fd7d87fd73f29d.tar.bz2 crosvm-a60744b42ee2589e9318029cf3fd7d87fd73f29d.tar.lz crosvm-a60744b42ee2589e9318029cf3fd7d87fd73f29d.tar.xz crosvm-a60744b42ee2589e9318029cf3fd7d87fd73f29d.tar.zst crosvm-a60744b42ee2589e9318029cf3fd7d87fd73f29d.zip |
crosvm: use seqpacket rather than datagram sockets
The advantage of seqpacket is that they are connection oriented. A listener can be created that accepts new connections, useful for the path based VM control sockets. Previously, the only bidirectional sockets in crosvm were either stream based or made using socketpair. This change also whitelists sendmsg and recvmsg for the common device policy. TEST=cargo test BUG=chromium:848187 Change-Id: I83fd46f54bce105a7730632cd013b5e7047db22b Reviewed-on: https://chromium-review.googlesource.com/1470917 Commit-Ready: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Tested-by: Zach Reizner <zachr@chromium.org> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/src/main.rs b/src/main.rs index 4965deb..32380b7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -46,14 +46,13 @@ pub mod plugin; use std::fs::OpenOptions; use std::net; use std::os::unix::io::RawFd; -use std::os::unix::net::UnixDatagram; use std::path::PathBuf; use std::string::String; use std::thread::sleep; use std::time::Duration; use qcow::QcowFile; -use sys_util::{getpid, kill_process_group, reap_child, syslog}; +use sys_util::{getpid, kill_process_group, net::UnixSeqpacket, reap_child, syslog}; use argument::{print_help, set_arguments, Argument}; use msg_socket::{MsgSender, Sender}; @@ -723,10 +722,7 @@ fn vms_request( let mut return_result = Ok(()); for socket_path in args { - match UnixDatagram::unbound().and_then(|s| { - s.connect(&socket_path)?; - Ok(s) - }) { + match UnixSeqpacket::connect(&socket_path) { Ok(s) => { let sender = Sender::<VmRequest>::new(s); if let Err(e) = sender.send(request) { @@ -788,10 +784,7 @@ fn balloon_vms(mut args: std::env::Args) -> std::result::Result<(), ()> { let mut return_result = Ok(()); for socket_path in args { - match UnixDatagram::unbound().and_then(|s| { - s.connect(&socket_path)?; - Ok(s) - }) { + match UnixSeqpacket::connect(&socket_path) { Ok(s) => { let sender = Sender::<VmRequest>::new(s); if let Err(e) = sender.send(&VmRequest::BalloonAdjust(num_bytes)) { @@ -881,10 +874,7 @@ fn disk_cmd(mut args: std::env::Args) -> std::result::Result<(), ()> { let mut return_result = Ok(()); for socket_path in args { - match UnixDatagram::unbound().and_then(|s| { - s.connect(&socket_path)?; - Ok(s) - }) { + match UnixSeqpacket::connect(&socket_path) { Ok(s) => { let sender = Sender::<VmRequest>::new(s); if let Err(e) = sender.send(&request) { |