Commit 104c08ba authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'acpi-4.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull ACPI fixes from Rafael Wysocki:
 "These revert one more problematic commit related to the ACPI-based
  handling of laptop lids and make some unuseful error messages coming
  from ACPICA go away.

  Specifics:

   - Revert one more commit related to the ACPI-based handling of laptop
     lids that changed the default behavior on laptops that booted with
     closed lids and introduced a regression there (Benjamin Tissoires).

   - Add a missing acpi_put_table() to the code implementing the
     /sys/firmware/acpi/tables interface to prevent a counter in the
     ACPICA core from overflowing (Dan Williams).

   - Drop error messages printed by ACPICA on acpi_get_table() reference
     counting mismatches as they need not indicate real errors at this
     point (Lv Zheng)"

* tag 'acpi-4.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  ACPICA: Tables: Fix regression introduced by a too early mechanism enabling
  Revert "ACPI / button: Change default behavior to lid_init_state=open"
  ACPI / sysfs: fix acpi_get_table() leak / acpi-sysfs denial of service
parents 89af529a 60319130
...@@ -418,11 +418,7 @@ acpi_tb_get_table(struct acpi_table_desc *table_desc, ...@@ -418,11 +418,7 @@ acpi_tb_get_table(struct acpi_table_desc *table_desc,
table_desc->validation_count++; table_desc->validation_count++;
if (table_desc->validation_count == 0) { if (table_desc->validation_count == 0) {
ACPI_ERROR((AE_INFO,
"Table %p, Validation count is zero after increment\n",
table_desc));
table_desc->validation_count--; table_desc->validation_count--;
return_ACPI_STATUS(AE_LIMIT);
} }
*out_table = table_desc->pointer; *out_table = table_desc->pointer;
......
...@@ -113,7 +113,7 @@ struct acpi_button { ...@@ -113,7 +113,7 @@ struct acpi_button {
static BLOCKING_NOTIFIER_HEAD(acpi_lid_notifier); static BLOCKING_NOTIFIER_HEAD(acpi_lid_notifier);
static struct acpi_device *lid_device; static struct acpi_device *lid_device;
static u8 lid_init_state = ACPI_BUTTON_LID_INIT_OPEN; static u8 lid_init_state = ACPI_BUTTON_LID_INIT_METHOD;
static unsigned long lid_report_interval __read_mostly = 500; static unsigned long lid_report_interval __read_mostly = 500;
module_param(lid_report_interval, ulong, 0644); module_param(lid_report_interval, ulong, 0644);
......
...@@ -333,14 +333,17 @@ static ssize_t acpi_table_show(struct file *filp, struct kobject *kobj, ...@@ -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); container_of(bin_attr, struct acpi_table_attr, attr);
struct acpi_table_header *table_header = NULL; struct acpi_table_header *table_header = NULL;
acpi_status status; acpi_status status;
ssize_t rc;
status = acpi_get_table(table_attr->name, table_attr->instance, status = acpi_get_table(table_attr->name, table_attr->instance,
&table_header); &table_header);
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
return -ENODEV; return -ENODEV;
return memory_read_from_buffer(buf, count, &offset, rc = memory_read_from_buffer(buf, count, &offset, table_header,
table_header, table_header->length); table_header->length);
acpi_put_table(table_header);
return rc;
} }
static int acpi_table_attr_init(struct kobject *tables_obj, static int acpi_table_attr_init(struct kobject *tables_obj,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment