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

Daniel Henrique Barboza danielhb413 at gmail.com
Mon Nov 1 00:34:27 UTC 2021



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 at gmail.com>




> 
> 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(-)
> 




More information about the libvir-list mailing list