mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-11 08:18:47 +00:00
PCI/VPD: Don't check Large Resource Item Names for validity
VPD consists of a series of Small and Large Resources. Computing the size of VPD requires only the length of each, which is specified in the generic tag of each resource. We only expect to see ID_STRING, RO_DATA, and RW_DATA in VPD, but it's not a problem if it contains other resource types because all we care about is the size. Drop the validity checking of Large Resource items. Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Hannes Reinecke <hare@suse.de>
This commit is contained in:
parent
6303049d16
commit
7fa75dd8c6
@ -83,27 +83,16 @@ static size_t pci_vpd_size(struct pci_dev *dev, size_t old_size)
|
||||
|
||||
if (header[0] & PCI_VPD_LRDT) {
|
||||
/* Large Resource Data Type Tag */
|
||||
tag = pci_vpd_lrdt_tag(header);
|
||||
/* Only read length from known tag items */
|
||||
if ((tag == PCI_VPD_LTIN_ID_STRING) ||
|
||||
(tag == PCI_VPD_LTIN_RO_DATA) ||
|
||||
(tag == PCI_VPD_LTIN_RW_DATA)) {
|
||||
if (pci_read_vpd(dev, off+1, 2,
|
||||
&header[1]) != 2) {
|
||||
pci_warn(dev, "failed VPD read at offset %zu\n",
|
||||
off + 1);
|
||||
return 0;
|
||||
}
|
||||
size = pci_vpd_lrdt_size(header);
|
||||
if (off + size > PCI_VPD_MAX_SIZE)
|
||||
goto error;
|
||||
|
||||
off += PCI_VPD_LRDT_TAG_SIZE + size;
|
||||
} else {
|
||||
pci_warn(dev, "invalid large VPD tag %02x at offset %zu\n",
|
||||
tag, off);
|
||||
if (pci_read_vpd(dev, off + 1, 2, &header[1]) != 2) {
|
||||
pci_warn(dev, "failed VPD read at offset %zu\n",
|
||||
off + 1);
|
||||
return 0;
|
||||
}
|
||||
size = pci_vpd_lrdt_size(header);
|
||||
if (off + size > PCI_VPD_MAX_SIZE)
|
||||
goto error;
|
||||
|
||||
off += PCI_VPD_LRDT_TAG_SIZE + size;
|
||||
} else {
|
||||
/* Short Resource Data Type Tag */
|
||||
tag = pci_vpd_srdt_tag(header);
|
||||
|
Loading…
x
Reference in New Issue
Block a user