Re: [libvirt PATCH v2 0/3] PCI VPD: Handle More Edge Cases

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 10/29/21 15:57, Dmitrii Shcherbakov wrote:
This patch set improves edge case testing:

* The parser is now more strict about checking boundary conditions when
   parsing fields: an invalid field length is a possibility which is
	now being accounted for;
* The parser will now make sure that RV and RW fields are the last
   in their section by making sure that no more data is left to read
	after those;
* The RW field in the read-write section is not considered a VPD format
   violation even though it is a violation of the spec since it does not
   prevent Libvirt from parsing valid data for presenting it to a user.
   This is a policy decision made by Libvirt in favor of usability with
   hardware that does not strictly follow the PCI/PCIe VPD spec.


Libvirtd in a Power9 host is throwing these warnings on every startup:


Running 'src/libvirtd'...
2021-10-31 23:56:40.637+0000: 140468: info : libvirt version: 7.9.0
2021-10-31 23:56:40.637+0000: 140468: info : hostname: ltc-boston118
2021-10-31 23:56:40.804+0000: 140520: error : virPCIVPDParseVPDLargeResourceFields:588 : internal error: VPD-W does not contain the mandatory RW field
2021-10-31 23:56:40.808+0000: 140520: error : virPCIVPDParseVPDLargeResourceFields:588 : internal error: VPD-W does not contain the mandatory RW field
2021-10-31 23:56:40.813+0000: 140520: error : virPCIVPDParseVPDLargeResourceFields:588 : internal error: VPD-W does not contain the mandatory RW field
2021-10-31 23:56:40.817+0000: 140520: error : virPCIVPDParseVPDLargeResourceFields:588 : internal error: VPD-W does not contain the mandatory RW field


With this series the warnings are now gone.


All patches:

Tested-by: Daniel Henrique Barboza <danielhb413@xxxxxxxxx>





Invalid field values are now skipped instead of halting further parsing
completely.

Some vendors use 0xFF as placeholders in VPD-W since those values do not
correspond to printable ASCII characters, they will be discarded,
however, parsing will continue beyond that point.

Also, it turns out that some vendors use printable ASCII characters not
present in the alphanumeric range. Following a mailing list discussion
Libvirt will accept printable ASCII characters to avoid cases where
useful data is discarded.

https://listman.redhat.com/archives/libvir-list/2021-October/msg01043.html

Higher-level software needs to account for this character set and act
accordingly.

For example, the outcome of this is that one may get "N/A" as a value
for a serial number that is supposed to be unique, however, there is
no way for Libvirt to validate serial number uniqueness anyway even if
it was a different character sequence.

https://gitlab.com/dmitriis/libvirt/-/pipelines/398517951
(x86_64 only, have not set up arch-specific runners yet and over the
limit of what gitlab provides)

Dmitrii Shcherbakov (3):
   PCI VPD: handle additional edge cases
   PCI VPD: Skip fields with invalid values
   PCI VPD: Fix a wrong return code in a test case

  src/util/virpcivpd.c  |  63 +++++++---
  tests/virpcivpdtest.c | 263 ++++++++++++++++++++++++++++++++++++++++--
  2 files changed, 296 insertions(+), 30 deletions(-)





[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux