• Dan Williams's avatar
    ACPI: NFIT: Fix support for variable 'SPA' structure size · e9cfd259
    Dan Williams authored
    ACPI 6.4 introduced the "SpaLocationCookie" to the NFIT "System Physical
    Address (SPA) Range Structure". The presence of that new field is
    indicated by the ACPI_NFIT_LOCATION_COOKIE_VALID flag. Pre-ACPI-6.4
    firmware implementations omit the flag and maintain the original size of
    the structure.
    
    Update the implementation to check that flag to determine the size
    rather than the ACPI 6.4 compliant definition of 'struct
    acpi_nfit_system_address' from the Linux ACPICA definitions.
    
    Update the test infrastructure for the new expectations as well, i.e.
    continue to emulate the ACPI 6.3 definition of that structure.
    
    Without this fix the kernel fails to validate 'SPA' structures and this
    leads to a crash in nfit_get_smbios_id() since that routine assumes that
    SPAs are valid if it finds valid SMBIOS tables.
    
        BUG: unable to handle page fault for address: ffffffffffffffa8
        [..]
        Call Trace:
         skx_get_nvdimm_info+0x56/0x130 [skx_edac]
         skx_get_dimm_config+0x1f5/0x213 [skx_edac]
         skx_register_mci+0x132/0x1c0 [skx_edac]
    
    Cc: Bob Moore <robert.moore@intel.com>
    Cc: Erik Kaneda <erik.kaneda@intel.com>
    Fixes: cf16b05c ("ACPICA: ACPI 6.4: NFIT: add Location Cookie field")
    Reported-by: default avatarYi Zhang <yi.zhang@redhat.com>
    Tested-by: default avatarYi Zhang <yi.zhang@redhat.com>
    Reviewed-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Link: https://lore.kernel.org/r/162037273007.1195827.10907249070709169329.stgit@dwillia2-desk3.amr.corp.intel.comSigned-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    e9cfd259
nfit.c 92.2 KB