Re: [Bugme-new] [Bug 11539] New: empty filename in /sys/firmware/acpi/tables

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2008-09-11 at 12:33 -0700, Andrew Morton wrote:
> On Thu, 11 Sep 2008 02:59:49 -0700 (PDT)
> bugme-daemon@xxxxxxxxxxxxxxxxxxx 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: acpi_other@xxxxxxxxxxxxxxxxxxxx
> >         ReportedBy: nokos@xxxxxxx
> > 
> > 
> > Hardware Environment:
> > A system with an acpi table with an empty signature
> > 
> > Problem Description:
> > 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")
> > 

Acked-by: Zhang Rui <rui.zhang@xxxxxxxxx>

thanks,
rui
 
> > diff a/drivers/acpi/system.c b/drivers/acpi/system.c
> > --- a/drivers/acpi/system.c
> > +++ b/drivers/acpi/system.c
> 
> (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 <nokos@xxxxxxx>
> 
> 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")
> 
> Cc: Bob Moore <robert.moore@xxxxxxxxx>
> Cc: Lin Ming <ming.m.lin@xxxxxxxxx>
> Cc: Len Brown <len.brown@xxxxxxxxx>
> Cc: <stable@xxxxxxxxxx>		[2.6.26.x]
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> ---
> 
>  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-tables drivers/acpi/system.c
> --- a/drivers/acpi/system.c~acpi-dont-create-empty-filenames-in-sys-firmware-acpi-tables
> +++ a/drivers/acpi/system.c
> @@ -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(struct 
>  	struct 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 majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux