devices: pci: return Result from PciAddress::from_string

Add error checking so invalid user input does not get silently ignored
and converted into bogus addresses.

Also add a PciAddress::new() function that accepts numeric values and
checks their ranges as a helper for the string parsing function as well
as for general use in other cases.

BUG=None
TEST=cargo test -p devices pci_address

Change-Id: I1131716bfd99e1819e7630021048482c2397b137
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3475440
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
7 files changed
tree: 13060a89913a1e9cec86e2bfc72eb5cd61ee4be3
  1. .cargo/
  2. .devcontainer/
  3. .github/
  4. aarch64/
  5. acpi_tables/
  6. arch/
  7. bin/
  8. bit_field/
  9. ci/
  10. common/
  11. crosvm-fuzz/
  12. crosvm_control/
  13. crosvm_plugin/
  14. devices/
  15. disk/
  16. docs/
  17. fuse/
  18. gpu_display/
  19. hypervisor/
  20. infra/
  21. integration_tests/
  22. kernel_cmdline/
  23. kernel_loader/
  24. kvm/
  25. kvm_sys/
  26. libcras_stub/
  27. libvda/
  28. linux_input_sys/
  29. logo/
  30. net_sys/
  31. net_util/
  32. power_monitor/
  33. protos/
  34. qcow_utils/
  35. resources/
  36. rutabaga_gfx/
  37. seccomp/
  38. src/
  39. system_api_stub/
  40. tests/
  41. third_party/
  42. tools/
  43. tpm2/
  44. tpm2-sys/
  45. usb_sys/
  46. usb_util/
  47. vfio_sys/
  48. vhost/
  49. virtio_sys/
  50. vm_control/
  51. vm_memory/
  52. x86_64/
  53. .dockerignore
  54. .gitignore
  55. .gitmodules
  56. .rustfmt.toml
  57. ARCHITECTURE.md
  58. Cargo.toml
  59. CONTRIBUTING.md
  60. LICENSE
  61. navbar.md
  62. OWNERS
  63. README.chromeos.md
  64. README.md
  65. run_tests
  66. rust-toolchain
  67. setup_cros_cargo.sh
  68. test_all
  69. unblocked_terms.txt
README.md

crosvm - The Chrome OS Virtual Machine Monitor

crosvm is a virtual machine monitor (VMM) based on Linux’s KVM hypervisor, with a focus on simplicity, security, and speed. crosvm is intended to run Linux guests, originally as a security boundary for running native applications on the Chrome OS platform. Compared to QEMU, crosvm doesn’t emulate architectures or real hardware, instead concentrating on paravirtualized devices, such as the virtio standard.

crosvm is currently used to run Linux/Android guests on Chrome OS devices.

Logo