aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannes Reinecke <[email protected]>2016-02-15 09:42:00 +0100
committerBjorn Helgaas <[email protected]>2016-02-29 17:46:50 -0600
commitf52e5629f66d5fd79ae8b8145d76ae0ddb47e142 (patch)
treefd7942e21ef8299161bd2ceec0be35db58e72b96
parent9eb45d5cc541142896f5fe7896d824c1091197c9 (diff)
PCI: Allow access to VPD attributes with size 0
It is not always possible to determine the actual size of the VPD data, so allow access to them if the size is set to '0'. Tested-by: Shane Seymour <[email protected]> Tested-by: Babu Moger <[email protected]> Signed-off-by: Hannes Reinecke <[email protected]> Signed-off-by: Bjorn Helgaas <[email protected]> Cc: Alexander Duyck <[email protected]>
-rw-r--r--drivers/pci/pci-sysfs.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index 95d9e7bd933b..a730f54d1247 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -769,10 +769,12 @@ static ssize_t read_vpd_attr(struct file *filp, struct kobject *kobj,
{
struct pci_dev *dev = to_pci_dev(kobj_to_dev(kobj));
- if (off > bin_attr->size)
- count = 0;
- else if (count > bin_attr->size - off)
- count = bin_attr->size - off;
+ if (bin_attr->size > 0) {
+ if (off > bin_attr->size)
+ count = 0;
+ else if (count > bin_attr->size - off)
+ count = bin_attr->size - off;
+ }
return pci_read_vpd(dev, off, count, buf);
}
@@ -783,10 +785,12 @@ static ssize_t write_vpd_attr(struct file *filp, struct kobject *kobj,
{
struct pci_dev *dev = to_pci_dev(kobj_to_dev(kobj));
- if (off > bin_attr->size)
- count = 0;
- else if (count > bin_attr->size - off)
- count = bin_attr->size - off;
+ if (bin_attr->size > 0) {
+ if (off > bin_attr->size)
+ count = 0;
+ else if (count > bin_attr->size - off)
+ count = bin_attr->size - off;
+ }
return pci_write_vpd(dev, off, count, buf);
}