aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiang Liu <jiang.liu@linux.intel.com>2013-12-19 07:38:12 -0500
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2014-01-05 10:07:14 -0500
commit54e5bb46597e5eba63e460a1f96eb2021dc71fec (patch)
treefdd47cfce49f0a3fc4ed39623a28e133f4abc6f5
parenta65ac52041cccaf598995bc44340849027f1d79b (diff)
PCI / pci-label: release allocated ACPI object on error recovery path
Function dsm_get_label() leaks the returned ACPI object if obj->package.count is not 2, so fix the possible memory leak. Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r--drivers/pci/pci-label.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/pci/pci-label.c b/drivers/pci/pci-label.c
index d51f45aa669e..f6e01a500d79 100644
--- a/drivers/pci/pci-label.c
+++ b/drivers/pci/pci-label.c
@@ -233,11 +233,7 @@ dsm_get_label(acpi_handle handle, int func,
233 return -1; 233 return -1;
234 234
235 obj = (union acpi_object *)output->pointer; 235 obj = (union acpi_object *)output->pointer;
236 236 if (obj->type == ACPI_TYPE_PACKAGE && obj->package.count == 2) {
237 switch (obj->type) {
238 case ACPI_TYPE_PACKAGE:
239 if (obj->package.count != 2)
240 break;
241 len = obj->package.elements[0].integer.value; 237 len = obj->package.elements[0].integer.value;
242 if (buf) { 238 if (buf) {
243 if (attribute == ACPI_ATTR_INDEX_SHOW) 239 if (attribute == ACPI_ATTR_INDEX_SHOW)
@@ -250,10 +246,10 @@ dsm_get_label(acpi_handle handle, int func,
250 } 246 }
251 kfree(output->pointer); 247 kfree(output->pointer);
252 return len; 248 return len;
253 break;
254 default:
255 kfree(output->pointer);
256 } 249 }
250
251 kfree(output->pointer);
252
257 return -1; 253 return -1;
258} 254}
259 255