diff options
| author | Jiang Liu <jiang.liu@linux.intel.com> | 2013-12-19 20:38:15 +0800 | 
|---|---|---|
| committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-01-05 15:54:21 +0100 | 
| commit | df45c712d1f4ef37714245fb75de726f4ca2bf8d (patch) | |
| tree | 17b2e6481e68d95ff8b4a27931062c13f2621bd5 | |
| parent | d6e0a2dd12f4067a5bcefb8bbd8ddbeff800afbc (diff) | |
| download | talos-op-linux-df45c712d1f4ef37714245fb75de726f4ca2bf8d.tar.gz talos-op-linux-df45c712d1f4ef37714245fb75de726f4ca2bf8d.zip  | |
ACPI / TPM: fix memory leak when walking ACPI namespace
In function ppi_callback(), memory allocated by acpi_get_name() will get
leaked when current device isn't the desired TPM device, so fix the
memory leak.
Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
Cc: All applicable <stable@vger.kernel.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
| -rw-r--r-- | drivers/char/tpm/tpm_ppi.c | 15 | 
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/char/tpm/tpm_ppi.c b/drivers/char/tpm/tpm_ppi.c index 8e562dc65601..e1f3337a0cf9 100644 --- a/drivers/char/tpm/tpm_ppi.c +++ b/drivers/char/tpm/tpm_ppi.c @@ -27,15 +27,18 @@ static char *tpm_device_name = "TPM";  static acpi_status ppi_callback(acpi_handle handle, u32 level, void *context,  				void **return_value)  { -	acpi_status status; +	acpi_status status = AE_OK;  	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; -	status = acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer); -	if (strstr(buffer.pointer, context) != NULL) { -		*return_value = handle; + +	if (ACPI_SUCCESS(acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer))) { +		if (strstr(buffer.pointer, context) != NULL) { +			*return_value = handle; +			status = AE_CTRL_TERMINATE; +		}  		kfree(buffer.pointer); -		return AE_CTRL_TERMINATE;  	} -	return AE_OK; + +	return status;  }  static inline void ppi_assign_params(union acpi_object params[4],  | 

