New: empty filename in /sys/firmware/acpi/tables
A message that is not in the archive (sent off-list or not yet received): [email protected]/
drivers/acpi/system.c
Quoted 31 lines · On Thu, 11 Sep 2008 02:59:49 -0700 (PDT) [email protected] wrote:
http://bugzilla.kernel.org/show_bug.cgi?id=11539
Summary: empty filename in /sys/firmware/acpi/tables Product: ACPI Version: 2.5 KernelVersion: 2.6.26 Platform: All OS/Version: Linux Tree: Mainline Status: NEW Severity: low Priority: P1 Component: Other AssignedTo: [email protected] ReportedBy: [email protected]Hardware Environment:
A system with an acpi table with an empty signatureProblem Description:
Since commitbc45b1d39a925b56796bebf8a397a0491489d85cacpi tables are allowed to have an empty signature and/sys/firmware/acpi/tablesuses the signature as filename. Applications using naive recursion through /sys loop forever. A possible solution would be:
(replacing the zero length filename with the string "NULL")diff
a/drivers/acpi/system.cb/drivers/acpi/system.cdrivers/acpi/system.c +0
-0
(argh)
Please don't submit patches via bugzilla, especially not copy-n-paste ones. It gets wordwrapped and tabs get replaced with spaces and similar crap. Patches should be submitted via email.
I cleaned this patch up and applied it locally.
Please send a Signed-off-by: for this patch as per Documentation/SubmittingPatches, section 12.
This patch fixes what appears to be a regression in 2.6.26 and looks like it is applicable to both 2.6.26.x and to 2.6.27. Len, Bob: please review asap - I can merge it with your ack if you'd like.
From: Peter Gruber <[email protected]>
Taken from http://bugzilla.kernel.org/show_bug.cgi?id=11539
Since commit bc45b1d39a925b56796bebf8a397a0491489d85c acpi tables are allowed to have an empty signature and /sys/firmware/acpi/tables uses the signature as filename. Applications using naive recursion through /sys loop forever. A possible solution would be: (replacing the zero length filename with the string "NULL")
---
drivers/acpi/system.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-)
drivers/acpi/system.c renamed from drivers/acpi/system.c~acpi-dont-create-empty-filenames-in-sys-firmware-acpi-tables +17 -8
@@ -78,9 +78,15 @@ static ssize_t acpi_table_show(struct ko container_of(bin_attr, struct acpi_table_attr, attr);struct acpi_table_header *table_header =NULL ;acpi_status status; +char name[ACPI_NAME_SIZE ]; + +if (strncmp (table_attr->name,"NULL" ,4 )) +memcpy (name, table_attr->name,ACPI_NAME_SIZE ); +else +memcpy (name,"\0\0\0\0" ,4 ); status = -acpi_get_table (table_attr->name, table_attr->instance, +acpi_get_table (name, table_attr->instance, &table_header);if (ACPI_FAILURE (status))return -ENODEV ;
@@ -95,21 +101,24 @@ static void acpi_table_attr_init(structstruct acpi_table_header *header =NULL ;struct acpi_table_attr *attr =NULL ; -memcpy (table_attr->name, table_header->signature,ACPI_NAME_SIZE ); +if (table_header->signature[0 ] !='\0' ) +memcpy (table_attr->name, table_header->signature, +ACPI_NAME_SIZE ); +else +memcpy (table_attr->name,"NULL" ,4 );list_for_each_entry (attr, &acpi_table_attr_list, node) { -if (!memcmp (table_header->signature, attr->name, -ACPI_NAME_SIZE )) +if (!memcmp (table_attr->name, attr->name,ACPI_NAME_SIZE ))if (table_attr->instance < attr->instance) table_attr->instance = attr->instance; } table_attr->instance++;if (table_attr->instance >1 || (table_attr->instance ==1 && - !acpi_get_table (table_header-> - signature,2 , - &header))) -sprintf (table_attr->name +4 ,"%d" , table_attr->instance); + !acpi_get_table + (table_header->signature,2 , &header))) +sprintf (table_attr->name +ACPI_NAME_SIZE ,"%d" , + table_attr->instance); table_attr->attr.size =0 ; table_attr->attr.read = acpi_table_show;
_
Zhang Rui
Acked-byQuoted 23 lines · Andrew Morton
Quoted 20 lines · On Thu, 11 Sep 2008 02:59:49 -0700 (PDT) [email protected] wrote:
http://bugzilla.kernel.org/show_bug.cgi?id=11539
Summary: empty filename in /sys/firmware/acpi/tables Product: ACPI Version: 2.5 KernelVersion: 2.6.26 Platform: All OS/Version: Linux Tree: Mainline Status: NEW Severity: low Priority: P1 Component: Other AssignedTo: [email protected] ReportedBy: [email protected]Hardware Environment:
A system with an acpi table with an empty signature
Quoted 7 lines
Quoted 7 lines
Problem Description:
Since commitbc45b1d39a925b56796bebf8a397a0491489d85cacpi tables are allowed to have an empty signature and/sys/firmware/acpi/tablesuses the signature as filename. Applications using naive recursion through /sys loop forever. A possible solution would be:
(replacing the zero length filename with the string "NULL")
thanks,
rui
Quoted 100 lines
drivers/acpi/system.c
Quoted 3 lines
diff
a/drivers/acpi/system.cb/drivers/acpi/system.cdrivers/acpi/system.c +0
-0(argh)
Please don't submit patches via bugzilla, especially not copy-n-paste ones. It gets wordwrapped and tabs get replaced with spaces and similar crap. Patches should be submitted via email.
I cleaned this patch up and applied it locally.
Please send a Signed-off-by: for this patch as per
Documentation/SubmittingPatches, section 12.This patch fixes what appears to be a regression in 2.6.26 and looks like it is applicable to both 2.6.26.x and to 2.6.27. Len, Bob: please review asap - I can merge it with your ack if you'd like.
From: Peter Gruber <[email protected]>
Taken from http://bugzilla.kernel.org/show_bug.cgi?id=11539
Since commit
bc45b1d39a925b56796bebf8a397a0491489d85cacpi tables are allowed to have an empty signature and/sys/firmware/acpi/tablesuses the signature as filename. Applications using naive recursion through /sys loop forever. A possible solution would be: (replacing the zero length filename with the string "NULL")Cc Bob Moore <[email protected]>Cc Lin Ming <[email protected]>Cc Len Brown <[email protected]>Cc <[email protected]> [2.6.26.x]Signed-off-by Andrew Morton <[email protected]>---
drivers/acpi/system.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-)diff -puN
drivers/acpi/system.c~acpi-dont-create-empty-filenames-in-sys-firmware-acpi-tablesdrivers/acpi/system.cdrivers/acpi/system.c renamed from drivers/acpi/system.c~acpi-dont-create-empty-filenames-in-sys-firmware-acpi-tables +17
-8@@ -78,9 +78,15 @@ static ssize_t acpi_table_show(struct ko container_of(bin_attr, struct acpi_table_attr, attr);struct acpi_table_header *table_header =NULL ;acpi_status status; +char name[ACPI_NAME_SIZE ]; + +if (strncmp (table_attr->name,"NULL" ,4 )) +memcpy (name, table_attr->name,ACPI_NAME_SIZE ); +else +memcpy (name,"\0\0\0\0" ,4 ); status = -acpi_get_table (table_attr->name, table_attr->instance, +acpi_get_table (name, table_attr->instance, &table_header);if (ACPI_FAILURE (status))return -ENODEV ;@@ -95,21 +101,24 @@ static void acpi_table_attr_init(structstruct acpi_table_header *header =NULL ;struct acpi_table_attr *attr =NULL ; -memcpy (table_attr->name, table_header->signature,ACPI_NAME_SIZE ); +if (table_header->signature[0 ] !='\0' ) +memcpy (table_attr->name, table_header->signature, +ACPI_NAME_SIZE ); +else +memcpy (table_attr->name,"NULL" ,4 );list_for_each_entry (attr, &acpi_table_attr_list, node) { -if (!memcmp (table_header->signature, attr->name, -ACPI_NAME_SIZE )) +if (!memcmp (table_attr->name, attr->name,ACPI_NAME_SIZE ))if (table_attr->instance < attr->instance) table_attr->instance = attr->instance; } table_attr->instance++;if (table_attr->instance >1 || (table_attr->instance ==1 && - !acpi_get_table (table_header-> - signature,2 , - &header))) -sprintf (table_attr->name +4 ,"%d" , table_attr->instance); + !acpi_get_table + (table_header->signature,2 , &header))) +sprintf (table_attr->name +ACPI_NAME_SIZE ,"%d" , + table_attr->instance); table_attr->attr.size =0 ; table_attr->attr.read = acpi_table_show;_
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html