#define ERRFILE_efi_autoexec ( ERRFILE_OTHER | 0x00540000 )
#define ERRFILE_efi_cachedhcp ( ERRFILE_OTHER | 0x00550000 )
#define ERRFILE_linux_sysfs ( ERRFILE_OTHER | 0x00560000 )
+#define ERRFILE_linux_acpi ( ERRFILE_OTHER | 0x00570000 )
/** @} */
*/
static userptr_t linux_acpi_find ( uint32_t signature, unsigned int index ) {
struct linux_acpi_table *table;
+ struct acpi_header *header;
union {
uint32_t signature;
char filename[5];
filename, strerror ( rc ) );
goto err_read;
}
+ header = user_to_virt ( table->data, 0 );
+ if ( ( ( ( size_t ) len ) < sizeof ( *header ) ) ||
+ ( ( ( size_t ) len ) < le32_to_cpu ( header->length ) ) ) {
+ rc = -ENOENT;
+ DBGC ( &linux_acpi_tables, "ACPI underlength %s (%d bytes)\n",
+ filename, len );
+ goto err_len;
+ }
/* Add to list of tables */
list_add ( &table->list, &linux_acpi_tables );
return table->data;
+ err_len:
ufree ( table->data );
err_read:
free ( table );