| From 0f12a4e29368a9476076515881d9ef4e5876c6e2 Mon Sep 17 00:00:00 2001 |
| From: Ben Hutchings <bhutchings@solarflare.com> |
| Date: Thu, 13 Jan 2011 19:47:56 +0000 |
| Subject: PCI: sysfs: Fix failure path for addition of "vpd" attribute |
| |
| From: Ben Hutchings <bhutchings@solarflare.com> |
| |
| commit 0f12a4e29368a9476076515881d9ef4e5876c6e2 upstream. |
| |
| Commit 280c73d ("PCI: centralize the capabilities code in |
| pci-sysfs.c") changed the initialisation of the "rom" and "vpd" |
| attributes, and made the failure path for the "vpd" attribute |
| incorrect. We must free the new attribute structure (attr), but |
| instead we currently free dev->vpd->attr. That will normally be NULL, |
| resulting in a memory leak, but it might be a stale pointer, resulting |
| in a double-free. |
| |
| Found by inspection; compile-tested only. |
| |
| Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> |
| Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/pci/pci-sysfs.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/pci/pci-sysfs.c |
| +++ b/drivers/pci/pci-sysfs.c |
| @@ -962,7 +962,7 @@ static int pci_create_capabilities_sysfs |
| attr->write = write_vpd_attr; |
| retval = sysfs_create_bin_file(&dev->dev.kobj, attr); |
| if (retval) { |
| - kfree(dev->vpd->attr); |
| + kfree(attr); |
| return retval; |
| } |
| dev->vpd->attr = attr; |