From a8f48cf82f78be6c49325d00d01b225b96611a15 Mon Sep 17 00:00:00 2001 From: Navdeep Parhar Date: Wed, 18 Mar 2020 01:09:40 +0000 Subject: [PATCH] Remove spurious warning about invalid VPD data. The warning used to be displayed for valid VPDs about 512B or above in size. Fix the size check and add a break while here so that the routine stops if if detects any problem. Tested with "pciconf -lV" Reviewed by: kib@, jhb@ MFC after: 1 week Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D23679 --- sys/dev/pci/pci.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c index 896aa811e9ea..93e4c136bdb4 100644 --- a/sys/dev/pci/pci.c +++ b/sys/dev/pci/pci.c @@ -1102,17 +1102,17 @@ pci_read_vpd(device_t pcib, pcicfgregs *cfg) break; } remain |= byte2 << 8; - if (remain > (0x7f*4 - vrs.off)) { - state = -1; - pci_printf(cfg, - "invalid VPD data, remain %#x\n", - remain); - } name = byte & 0x7f; } else { remain = byte & 0x7; name = (byte >> 3) & 0xf; } + if (vrs.off + remain - vrs.bytesinval > 0x8000) { + pci_printf(cfg, + "VPD data overflow, remain %#x\n", remain); + state = -1; + break; + } switch (name) { case 0x2: /* String */ cfg->vpd.vpd_ident = malloc(remain + 1,