diff options
Diffstat (limited to 'src/linux.rs')
-rw-r--r-- | src/linux.rs | 28 |
1 files changed, 6 insertions, 22 deletions
diff --git a/src/linux.rs b/src/linux.rs index 75b09b5..7ce7c82 100644 --- a/src/linux.rs +++ b/src/linux.rs @@ -32,7 +32,6 @@ use kvm::*; use libcras::CrasClient; use msg_socket::{MsgError, MsgReceiver, MsgSender, MsgSocket}; use net_util::{Error as NetError, MacAddress, Tap}; -use qcow::{self, ImageType, QcowFile}; use rand_ish::SimpleRng; use remain::sorted; use resources::{Alloc, SystemAllocator}; @@ -82,6 +81,7 @@ pub enum Error { ChownTpmStorage(sys_util::Error), CloneEventFd(sys_util::Error), CreateCrasClient(libcras::Error), + CreateDiskError(disk::Error), CreateEventFd(sys_util::Error), CreatePollContext(sys_util::Error), CreateSignalFd(sys_util::SignalFdError), @@ -90,7 +90,6 @@ pub enum Error { CreateTimerFd(sys_util::Error), CreateTpmStorage(PathBuf, io::Error), CreateUsbProvider(devices::usb::host_backend::error::Error), - DetectImageType(qcow::Error), DeviceJail(io_jail::Error), DevicePivotRoot(io_jail::Error), Disk(io::Error), @@ -114,7 +113,6 @@ pub enum Error { PmemDeviceNew(sys_util::Error), PollContextAdd(sys_util::Error), PollContextDelete(sys_util::Error), - QcowDeviceCreate(qcow::Error), ReadLowmemAvailable(io::Error), ReadLowmemMargin(io::Error), RegisterBalloon(arch::DeviceRegistrationError), @@ -162,6 +160,7 @@ impl Display for Error { ChownTpmStorage(e) => write!(f, "failed to chown tpm storage: {}", e), CloneEventFd(e) => write!(f, "failed to clone eventfd: {}", e), CreateCrasClient(e) => write!(f, "failed to create cras client: {}", e), + CreateDiskError(e) => write!(f, "failed to create virtual disk: {}", e), CreateEventFd(e) => write!(f, "failed to create eventfd: {}", e), CreatePollContext(e) => write!(f, "failed to create poll context: {}", e), CreateSignalFd(e) => write!(f, "failed to create signalfd: {}", e), @@ -172,7 +171,6 @@ impl Display for Error { write!(f, "failed to create tpm storage dir {}: {}", p.display(), e) } CreateUsbProvider(e) => write!(f, "failed to create usb provider: {}", e), - DetectImageType(e) => write!(f, "failed to detect disk image type: {}", e), DeviceJail(e) => write!(f, "failed to jail device: {}", e), DevicePivotRoot(e) => write!(f, "failed to pivot root device: {}", e), Disk(e) => write!(f, "failed to load disk image: {}", e), @@ -203,7 +201,6 @@ impl Display for Error { PmemDeviceNew(e) => write!(f, "failed to create pmem device: {}", e), PollContextAdd(e) => write!(f, "failed to add fd to poll context: {}", e), PollContextDelete(e) => write!(f, "failed to remove fd from poll context: {}", e), - QcowDeviceCreate(e) => write!(f, "failed to read qcow formatted file {}", e), ReadLowmemAvailable(e) => write!( f, "failed to read /sys/kernel/mm/chromeos-low_mem/available: {}", @@ -351,25 +348,12 @@ fn create_block_device( }; flock(&raw_image, lock_op, true).map_err(Error::DiskImageLock)?; - let image_type = qcow::detect_image_type(&raw_image).map_err(Error::DetectImageType)?; - let dev = match image_type { - ImageType::Raw => { - // Access as a raw block device. - let dev = virtio::Block::new(raw_image, disk.read_only, Some(disk_device_socket)) - .map_err(Error::BlockDeviceNew)?; - Box::new(dev) as Box<dyn VirtioDevice> - } - ImageType::Qcow2 => { - // Valid qcow header present - let qcow_image = QcowFile::from(raw_image).map_err(Error::QcowDeviceCreate)?; - let dev = virtio::Block::new(qcow_image, disk.read_only, Some(disk_device_socket)) - .map_err(Error::BlockDeviceNew)?; - Box::new(dev) as Box<dyn VirtioDevice> - } - }; + let disk_file = disk::create_disk_file(raw_image).map_err(Error::CreateDiskError)?; + let dev = virtio::Block::new(disk_file, disk.read_only, Some(disk_device_socket)) + .map_err(Error::BlockDeviceNew)?; Ok(VirtioDeviceStub { - dev, + dev: Box::new(dev), jail: simple_jail(&cfg, "block_device.policy")?, }) } |