Re: ACPICA: Tables: Cleanup RSDP signature codes.

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

 



On Thu, Oct 17, 2013 at 03:39:42PM +0300, Dan Carpenter wrote:
> Does anyone have an idea about this?  The code is obviously wrong but
> the fix is unclear.  Perhaps we should just note the bug in a comment?

The code is confusing but did things right.
The RSDP table header is different with other tables, its signature is
actually 8 bytes. We passed the table address to this print function
using the common table header pointer that caused the warning.

Perhaps we should change the prototype of acpi_tb_print_table_header to:
void
acpi_tb_print_table_header(acpi_physical_address address, void *header)
and then cast it to appropriate type after we found which type of table
it is really is. I suppose this will eliminate the warning?

Thanks,
Aaron

> 
> regards,
> dan carpenter
> 
> On Fri, Sep 27, 2013 at 01:35:20AM +0300, Dan Carpenter wrote:
> > Hello Lv Zheng,
> > 
> > I'm sorry to bother you about this.  This code has been this way for
> > years, but your recent formatting cleanups made it into something Smatch
> > could understand and complain about.  Hopefully, you could take a look?
> > 
> > The patch cacba8657351: "ACPICA: Tables: Cleanup RSDP signature
> > codes." from Sep 23, 2013, leads to the following
> > static checker warning: "drivers/acpi/acpica/tbprint.c:141
> > acpi_tb_print_table_header()
> > 	 error: strncmp() '((((header->signature))))' too small (4 vs 8)"
> > 
> > drivers/acpi/acpica/tbprint.c
> >    138                  ACPI_INFO((AE_INFO, "%4.4s %p %05X",
> >    139                             header->signature, ACPI_CAST_PTR(void, address),
> >    140                             header->length));
> >    141          } else if (ACPI_VALIDATE_RSDP_SIG(header->signature)) {
> >                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > The RSDP_SIG is an 8 character signature but the header->signature
> > buffer only has 4 characters so the signatures never match.  What's the
> > deal with that?
> > 
> >    142  
> >    143                  /* RSDP has no common fields */
> >    144  
> >    145                  ACPI_MEMCPY(local_header.oem_id,
> >    146                              ACPI_CAST_PTR(struct acpi_table_rsdp,
> >    147                                            header)->oem_id, ACPI_OEM_ID_SIZE);
> > 
> > regards,
> > dan carpenter
> --
> 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