diff options
author | Zach Reizner <zachr@google.com> | 2019-03-15 01:47:06 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-03-18 07:05:10 -0700 |
commit | 7e622edd00393dbd018f6d20039f8abfa945a287 (patch) | |
tree | b94981ce06b7bab3ad23ebd4572aa8c681ba1f3b /devices | |
parent | a6b9ca338879b502b33ec48ca82ec60dcaa170f9 (diff) | |
download | crosvm-7e622edd00393dbd018f6d20039f8abfa945a287.tar crosvm-7e622edd00393dbd018f6d20039f8abfa945a287.tar.gz crosvm-7e622edd00393dbd018f6d20039f8abfa945a287.tar.bz2 crosvm-7e622edd00393dbd018f6d20039f8abfa945a287.tar.lz crosvm-7e622edd00393dbd018f6d20039f8abfa945a287.tar.xz crosvm-7e622edd00393dbd018f6d20039f8abfa945a287.tar.zst crosvm-7e622edd00393dbd018f6d20039f8abfa945a287.zip |
usb: remove unused/abused fd argument from EventHandler::on_event
None of instances of EventHandler::on_event actually used the fd. The PollfdChangeHandler::remove_poll_fd callback fabricated a potentially valid fd (0), which went undetected because nobody used it. Additionally, using RawFds almost always requires unsafe and should be avoided. CQ-DEPEND=CL:1522214 BUG=chromium:831850 TEST=cargo test Change-Id: I095edbcad317e4832b1fb29fd08d602fbde4fd5d Reviewed-on: https://chromium-review.googlesource.com/1525135 Commit-Ready: Jingkui Wang <jkwang@google.com> Tested-by: Jingkui Wang <jkwang@google.com> Reviewed-by: Jingkui Wang <jkwang@google.com>
Diffstat (limited to 'devices')
-rw-r--r-- | devices/src/usb/host_backend/context.rs | 4 | ||||
-rw-r--r-- | devices/src/usb/host_backend/host_backend_device_provider.rs | 6 | ||||
-rw-r--r-- | devices/src/usb/xhci/intr_resample_handler.rs | 3 | ||||
-rw-r--r-- | devices/src/usb/xhci/ring_buffer_controller.rs | 3 | ||||
-rw-r--r-- | devices/src/utils/async_job_queue.rs | 3 | ||||
-rw-r--r-- | devices/src/utils/event_loop.rs | 18 |
6 files changed, 20 insertions, 17 deletions
diff --git a/devices/src/usb/host_backend/context.rs b/devices/src/usb/host_backend/context.rs index 260aad1..d4c60e3 100644 --- a/devices/src/usb/host_backend/context.rs +++ b/devices/src/usb/host_backend/context.rs @@ -116,7 +116,7 @@ struct LibUsbEventHandler { } impl EventHandler for LibUsbEventHandler { - fn on_event(&self, _fd: RawFd) -> std::result::Result<(), ()> { + fn on_event(&self) -> std::result::Result<(), ()> { self.context.handle_events_nonblock(); Ok(()) } @@ -141,7 +141,7 @@ impl LibUsbPollfdChangeHandler for PollfdChangeHandler { fn remove_poll_fd(&self, fd: RawFd) { if let Some(h) = self.event_handler.upgrade() { - match h.on_event(0) { + match h.on_event() { Ok(()) => {} Err(e) => error!("cannot handle event: {:?}", e), } diff --git a/devices/src/usb/host_backend/host_backend_device_provider.rs b/devices/src/usb/host_backend/host_backend_device_provider.rs index 95b52fd..32c5e9a 100644 --- a/devices/src/usb/host_backend/host_backend_device_provider.rs +++ b/devices/src/usb/host_backend/host_backend_device_provider.rs @@ -143,7 +143,7 @@ impl ProviderInner { } } - fn on_event_helper(&self, _fd: RawFd) -> Result<()> { + fn on_event_helper(&self) -> Result<()> { let cmd = self.sock.recv().map_err(Error::ReadControlSock)?; match cmd { UsbControlCommand::AttachDevice { @@ -315,8 +315,8 @@ impl ProviderInner { } impl EventHandler for ProviderInner { - fn on_event(&self, fd: RawFd) -> std::result::Result<(), ()> { - self.on_event_helper(fd).map_err(|e| { + fn on_event(&self) -> std::result::Result<(), ()> { + self.on_event_helper().map_err(|e| { error!("host backend device provider failed: {}", e); () }) diff --git a/devices/src/usb/xhci/intr_resample_handler.rs b/devices/src/usb/xhci/intr_resample_handler.rs index 202ed1a..8c7ff99 100644 --- a/devices/src/usb/xhci/intr_resample_handler.rs +++ b/devices/src/usb/xhci/intr_resample_handler.rs @@ -3,7 +3,6 @@ // found in the LICENSE file. use super::interrupter::Interrupter; -use std::os::unix::io::RawFd; use std::sync::Arc; use sync::Mutex; use sys_util::{EventFd, WatchingEvents}; @@ -39,7 +38,7 @@ impl IntrResampleHandler { } } impl EventHandler for IntrResampleHandler { - fn on_event(&self, _fd: RawFd) -> Result<(), ()> { + fn on_event(&self) -> Result<(), ()> { match self.resample_evt.read() { Ok(_) => {} Err(e) => { diff --git a/devices/src/usb/xhci/ring_buffer_controller.rs b/devices/src/usb/xhci/ring_buffer_controller.rs index 7aed102..6452a57 100644 --- a/devices/src/usb/xhci/ring_buffer_controller.rs +++ b/devices/src/usb/xhci/ring_buffer_controller.rs @@ -5,7 +5,6 @@ use super::ring_buffer_stop_cb::RingBufferStopCallback; use super::xhci_abi::*; use std::fmt::{self, Display}; -use std::os::unix::io::RawFd; use std::sync::{Arc, MutexGuard}; use sync::Mutex; use utils::{self, EventHandler, EventLoop}; @@ -184,7 +183,7 @@ impl<T> EventHandler for RingBufferController<T> where T: 'static + TransferDescriptorHandler + Send, { - fn on_event(&self, _fd: RawFd) -> std::result::Result<(), ()> { + fn on_event(&self) -> std::result::Result<(), ()> { // `self.event` triggers ring buffer controller to run, the value read is not important. match self.event.read() { Ok(_) => {} diff --git a/devices/src/utils/async_job_queue.rs b/devices/src/utils/async_job_queue.rs index 223b96d..8f9f4a3 100644 --- a/devices/src/utils/async_job_queue.rs +++ b/devices/src/utils/async_job_queue.rs @@ -5,7 +5,6 @@ use super::{Error, Result}; use super::{EventHandler, EventLoop}; use std::mem; -use std::os::unix::io::RawFd; use std::sync::Arc; use sync::Mutex; use sys_util::{EventFd, WatchingEvents}; @@ -41,7 +40,7 @@ impl AsyncJobQueue { } impl EventHandler for AsyncJobQueue { - fn on_event(&self, _fd: RawFd) -> std::result::Result<(), ()> { + fn on_event(&self) -> std::result::Result<(), ()> { // We want to read out the event, but the value is not important. match self.evt.read() { Ok(_) => {} diff --git a/devices/src/utils/event_loop.rs b/devices/src/utils/event_loop.rs index f27c19c..99fe1c9 100644 --- a/devices/src/utils/event_loop.rs +++ b/devices/src/utils/event_loop.rs @@ -65,7 +65,7 @@ pub struct EventLoop { /// Interface for event handler. pub trait EventHandler: Send + Sync { - fn on_event(&self, fd: RawFd) -> std::result::Result<(), ()>; + fn on_event(&self) -> std::result::Result<(), ()>; } impl EventLoop { @@ -123,7 +123,7 @@ impl EventLoop { Some(handler) => { // Drop lock before triggering the event. drop(locked); - match handler.on_event(fd) { + match handler.on_event() { Ok(()) => {} Err(_) => { error!("event loop stopping due to handle event error"); @@ -199,18 +199,18 @@ impl EventLoop { #[cfg(test)] mod tests { use super::*; - use std::os::unix::io::{AsRawFd, FromRawFd, RawFd}; use std::sync::{Arc, Condvar, Mutex}; use sys_util::EventFd; struct EventLoopTestHandler { val: Mutex<u8>, cvar: Condvar, + evt: EventFd, } impl EventHandler for EventLoopTestHandler { - fn on_event(&self, fd: RawFd) -> std::result::Result<(), ()> { - let _ = unsafe { EventFd::from_raw_fd(fd).read() }; + fn on_event(&self) -> std::result::Result<(), ()> { + self.evt.read().unwrap(); *self.val.lock().unwrap() += 1; self.cvar.notify_one(); Ok(()) @@ -230,9 +230,15 @@ mod tests { let h = Arc::new(EventLoopTestHandler { val: Mutex::new(0), cvar: Condvar::new(), + evt, }); let t: Arc<EventHandler> = h.clone(); - l.add_event(&evt, WatchingEvents::empty().set_read(), Arc::downgrade(&t)); + l.add_event( + &h.evt, + WatchingEvents::empty().set_read(), + Arc::downgrade(&t), + ) + .unwrap(); self_evt.write(1).unwrap(); let _ = h.cvar.wait(h.val.lock().unwrap()).unwrap(); l.stop(); |