linux/drivers/acpi/nfit
Dan Williams f596c8844f nfit: Fix nfit_intel_shutdown_status() command submission
The implementation is broken in all the ways the unit test did not touch:

1/ The local definition of in_buf and in_obj violated C99 initializer
   expectations for zeroing. By only initializing 2 out of the three
   struct members the compiler was free to zero-initialize the remaining
   entry even though the aliased location in the union was initialized.

2/ The implementation made assumptions about the state of the 'smart'
   payload after command execution that are satisfied by
   acpi_nfit_ctl(), but not acpi_evaluate_dsm().

3/ populate_shutdown_status() is skipped on Intel NVDIMMs due to the early
   return for skipping the common _LS{I,R,W} enabling.

4/ The input length should be zero.

This breakage was missed due to the unit test implementation only
testing the case where nfit_intel_shutdown_status() returns a valid
payload.

Much of this complexity would be saved if acpi_nfit_ctl() could be used, but
that currently requires a 'struct nvdimm *' argument and one is not created
until later in the init process. The health result is needed before the device
is created because the payload gates whether the nmemX/nfit/dirty_shutdown
property is visible in sysfs.

Cc: <stable@vger.kernel.org>
Fixes: 0ead11181f ("acpi, nfit: Collect shutdown status")
Reported-by: Dexuan Cui <decui@microsoft.com>
Reviewed-by: Dexuan Cui <decui@microsoft.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2019-01-29 22:08:34 -08:00
..
core.c nfit: Fix nfit_intel_shutdown_status() command submission 2019-01-29 22:08:34 -08:00
intel.c acpi/nfit, libnvdimm/security: add Intel DSM 1.8 master passphrase support 2018-12-21 12:44:41 -08:00
intel.h acpi/nfit, libnvdimm: Introduce nvdimm_security_ops 2018-12-13 17:54:13 -08:00
Kconfig acpi/nfit: Add support for Intel DSM 1.8 commands 2018-12-04 10:31:11 -08:00
Makefile acpi/nfit, libnvdimm: Introduce nvdimm_security_ops 2018-12-13 17:54:13 -08:00
mce.c acpi/nfit, x86/mce: Validate a MCE's address before using it 2018-11-06 19:13:26 +01:00
nfit.h acpi/nfit, libnvdimm: Store dimm id as a member to struct nvdimm 2018-12-13 17:54:12 -08:00