Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1423837AbdD1Fao (ORCPT ); Fri, 28 Apr 2017 01:30:44 -0400 Received: from mga01.intel.com ([192.55.52.88]:48360 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1164575AbdD1Fab (ORCPT ); Fri, 28 Apr 2017 01:30:31 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.37,387,1488873600"; d="scan'208";a="962037839" From: Lv Zheng To: "Rafael J . Wysocki" , "Rafael J . Wysocki" , Len Brown Cc: Lv Zheng , Lv Zheng , linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org, Dan Williams Subject: [PATCH v3 3/4] ACPI: sysfs: Fix acpi_get_table() leak Date: Fri, 28 Apr 2017 13:30:26 +0800 Message-Id: <4fc8ea10af02eeaea5d7cb2bc8625ddc47cd6c16.1493357251.git.lv.zheng@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <5361b51c7c257b3216475018a3a5cc4f8b6b21c6.1493281247.git.lv.zheng@intel.com> References: <5361b51c7c257b3216475018a3a5cc4f8b6b21c6.1493281247.git.lv.zheng@intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1473 Lines: 45 From: Dan Williams Reading an ACPI table through the /sys/firmware/acpi/tables interface more than 65,536 times leads to the following log message: ACPI Error: Table ffff88033595eaa8, Validation count is zero after increment (20170119/tbutils-423) Add the missing acpi_put_table() so the table ->validation_count is decremented after each read. Reported-by: Anush Seetharaman Signed-off-by: Dan Williams Signed-off-by: Lv Zheng --- drivers/acpi/sysfs.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c index 1b5ee1e..2bbf722 100644 --- a/drivers/acpi/sysfs.c +++ b/drivers/acpi/sysfs.c @@ -333,14 +333,17 @@ static ssize_t acpi_table_show(struct file *filp, struct kobject *kobj, container_of(bin_attr, struct acpi_table_attr, attr); struct acpi_table_header *table_header = NULL; acpi_status status; + ssize_t len; status = acpi_get_table(table_attr->name, table_attr->instance, &table_header); if (ACPI_FAILURE(status)) return -ENODEV; - return memory_read_from_buffer(buf, count, &offset, - table_header, table_header->length); + len = memory_read_from_buffer(buf, count, &offset, + table_header, table_header->length); + acpi_put_table(table_header); + return len; } static int acpi_table_attr_init(struct kobject *tables_obj, -- 2.7.4