Niklas Cassel
ce9e6c5f2a
ata: libata-scsi: Fix system suspend for a security locked drive
...
[ Upstream commit b11890683380a36b8488229f818d5e76e8204587 ]
Commit cf3fc037623c ("ata: libata-scsi: Fix ata_to_sense_error() status
handling") fixed ata_to_sense_error() to properly generate sense key
ABORTED COMMAND (without any additional sense code), instead of the
previous bogus sense key ILLEGAL REQUEST with the additional sense code
UNALIGNED WRITE COMMAND, for a failed command.
However, this broke suspend for Security locked drives (drives that have
Security enabled, and have not been Security unlocked by boot firmware).
The reason for this is that the SCSI disk driver, for the Synchronize
Cache command only, treats any sense data with sense key ILLEGAL REQUEST
as a successful command (regardless of ASC / ASCQ).
After commit cf3fc037623c ("ata: libata-scsi: Fix ata_to_sense_error()
status handling") the code that treats any sense data with sense key
ILLEGAL REQUEST as a successful command is no longer applicable, so the
command fails, which causes the system suspend to be aborted:
sd 1:0:0:0: PM: dpm_run_callback(): scsi_bus_suspend returns -5
sd 1:0:0:0: PM: failed to suspend async: error -5
PM: Some devices failed to suspend, or early wake event detected
To make suspend work once again, for a Security locked device only,
return sense data LOGICAL UNIT ACCESS NOT AUTHORIZED, the actual sense
data which a real SCSI device would have returned if locked.
The SCSI disk driver treats this sense data as a successful command.
Cc: stable@vger.kernel.org
Reported-by: Ilia Baryshnikov <qwelias@gmail.com>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220704
Fixes: cf3fc037623c ("ata: libata-scsi: Fix ata_to_sense_error() status handling")
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Signed-off-by: Niklas Cassel <cassel@kernel.org>
[ Adjust context ]
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2025-12-03 12:45:21 +01:00
..
acard-ahci.c
ata: make qc_prep return ata_completion_errors
2020-10-01 13:18:26 +02:00
ahci.c
ahci: add PCI ID for Marvell 88SE9215 SATA Controller
2025-05-02 07:39:10 +02:00
ahci.h
ahci: add 43-bit DMA address quirk for ASMedia ASM1061 controllers
2024-03-01 13:13:33 +01:00
ahci_brcm.c
ata: ahci_brcm: Add back regulators management
2021-03-04 10:26:23 +01:00
ahci_ceva.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201
2019-05-30 11:29:52 -07:00
ahci_da850.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 45
2019-05-24 17:27:12 +02:00
ahci_dm816.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 45
2019-05-24 17:27:12 +02:00
ahci_imx.c
ata: ahci-imx: Fix MODULE_ALIAS
2022-10-29 10:20:34 +02:00
ahci_mtk.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
2019-05-30 11:26:41 -07:00
ahci_mvebu.c
ata: ahci: mvebu: Make SATA PHY optional for Armada 3720
2020-11-01 12:01:05 +01:00
ahci_octeon.c
ahci_platform.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 45
2019-05-24 17:27:12 +02:00
ahci_qoriq.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 45
2019-05-24 17:27:12 +02:00
ahci_seattle.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 235
2019-06-19 17:09:07 +02:00
ahci_st.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
ahci_sunxi.c
ata: ahci_sunxi: Disable DIPM
2021-07-19 08:53:15 +02:00
ahci_tegra.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 282
2019-06-05 17:36:37 +02:00
ahci_xgene.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 13
2019-05-21 11:28:45 +02:00
ata_generic.c
ata_piix.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 18
2019-05-21 11:28:46 +02:00
Kconfig
ata: Fix SATA_MOBILE_LPM_POLICY description in Kconfig
2025-08-28 16:21:35 +02:00
libahci.c
ata: libahci: clear pending interrupt status
2023-10-10 21:46:36 +02:00
libahci_platform.c
ata: libahci_platform: Sanity check the DT child nodes number
2022-10-26 13:22:56 +02:00
libata-acpi.c
treewide: Add SPDX license identifier for missed files
2019-05-21 10:50:45 +02:00
libata-core.c
ata: libata: Fix memory leak for error path in ata_host_alloc()
2024-09-12 11:03:50 +02:00
libata-eh.c
ata: libata-eh: Do not use ATAPI DMA for a device limited to PIO mode
2025-05-02 07:39:10 +02:00
libata-pmp.c
libata: Return correct status in sata_pmp_eh_recover_pm() when ATA_DFLAG_DETACH is set
2020-04-17 10:50:22 +02:00
libata-scsi.c
ata: libata-scsi: Fix system suspend for a security locked drive
2025-12-03 12:45:21 +01:00
libata-sff.c
libata: fix ata_pio_sector for CONFIG_HIGHMEM
2021-08-12 13:21:04 +02:00
libata-trace.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 18
2019-05-21 11:28:46 +02:00
libata-transport.c
ata: libata-core: Do not register PM operations for SAS ports
2023-10-10 21:46:42 +02:00
libata-transport.h
libata-zpodd.c
libata: zpodd: Fix small read overflow in zpodd_get_mech_type()
2019-07-29 16:00:14 -06:00
libata.h
ata: libata-core: Do not register PM operations for SAS ports
2023-10-10 21:46:42 +02:00
Makefile
ata: add Buddha PATA controller driver
2019-02-08 06:32:01 -07:00
pata_acpi.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_ali.c
pata_amd.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_arasan_cf.c
pata_arasan_cf: fix IRQ check
2021-05-14 09:44:24 +02:00
pata_artop.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_atiixp.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_atp867x.c
libata: switch remaining drivers to use dma_set_mask_and_coherent
2019-08-26 13:58:59 -06:00
pata_bk3710.c
pata_buddha.c
ata/pata_buddha: Probe via modalias instead of initcall
2019-08-23 06:58:50 -06:00
pata_cmd64x.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_cmd640.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_cs5520.c
libata: switch remaining drivers to use dma_set_mask_and_coherent
2019-08-26 13:58:59 -06:00
pata_cs5530.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333
2019-06-05 17:37:06 +02:00
pata_cs5535.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333
2019-06-05 17:37:06 +02:00
pata_cs5536.c
ata: pata_cs5536: fix build on 32-bit UML
2025-07-17 18:24:57 +02:00
pata_cypress.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_efar.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_ep93xx.c
pata_ep93xx: fix deferred probing
2021-07-14 16:53:21 +02:00
pata_falcon.c
pata_ftide010.c
ata: pata_ftide010: Add missing MODULE_DESCRIPTION
2023-09-23 11:00:00 +02:00
pata_gayle.c
pata_hpt3x2n.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_hpt3x3.c
libata: switch remaining drivers to use dma_set_mask_and_coherent
2019-08-26 13:58:59 -06:00
pata_hpt37x.c
ata: pata_hpt37x: fix PCI clock detection
2022-03-08 19:07:46 +01:00
pata_hpt366.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_icside.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_imx.c
pata_isapnp.c
ata: pata_isapnp: Add missing error check for devm_ioport_map()
2023-12-08 08:44:23 +01:00
pata_it821x.c
pata_it8213.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_ixp4xx_cf.c
pata_ipx4xx_cf: Fix unsigned comparison with less than zero
2023-01-18 11:40:59 +01:00
pata_jmicron.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_legacy.c
ata: pata_legacy: make legacy_exit() work again
2024-06-16 13:28:49 +02:00
pata_macio.c
ata: pata_macio: Use WARN instead of BUG
2024-09-12 11:03:55 +02:00
pata_marvell.c
ata: pata_marvell: Check the 'bmdma_addr' beforing reading
2022-04-27 13:50:48 +02:00
pata_mpc52xx.c
pata_mpiix.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_netcell.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_ninja32.c
libata: switch remaining drivers to use dma_set_mask_and_coherent
2019-08-26 13:58:59 -06:00
pata_ns87410.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 18
2019-05-21 11:28:46 +02:00
pata_ns87415.c
ata: pata_ns87415: mark ns87560_tf_read static
2023-08-11 11:53:49 +02:00
pata_octeon_cf.c
ata: pata_octeon_cf: Fix refcount leak in octeon_cf_probe
2022-06-14 18:11:57 +02:00
pata_of_platform.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
pata_oldpiix.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_opti.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_optidma.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_palmld.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
pata_pcmcia.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 18
2019-05-21 11:28:46 +02:00
pata_pdc202xx_old.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_pdc2027x.c
libata: switch remaining drivers to use dma_set_mask_and_coherent
2019-08-26 13:58:59 -06:00
pata_piccolo.c
pata_platform.c
ata: pata_platform: Add IRQF_SHARED to IRQ flags
2019-02-08 06:42:55 -07:00
pata_pxa.c
ata: pata_pxa: Fix potential NULL pointer dereference in pxa_ata_probe()
2025-05-02 07:39:08 +02:00
pata_radisys.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_rb532_cf.c
pata_rb532_cf: fix deferred probing
2021-07-14 16:53:20 +02:00
pata_rdc.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 18
2019-05-21 11:28:46 +02:00
pata_rz1000.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_samsung_cf.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
2019-06-19 17:09:55 +02:00
pata_sc1200.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333
2019-06-05 17:37:06 +02:00
pata_sch.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 300
2019-06-05 17:37:00 +02:00
pata_serverworks.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_sil680.c
libata: switch remaining drivers to use dma_set_mask_and_coherent
2019-08-26 13:58:59 -06:00
pata_sis.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_sl82c105.c
treewide: Add SPDX license identifier for more missed files
2019-05-21 10:50:45 +02:00
pata_triflex.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333
2019-06-05 17:37:06 +02:00
pata_via.c
ata: pata_via: Force PIO for ATAPI devices on VT6415/VT6330
2025-06-27 11:02:51 +01:00
pdc_adma.c
ata: make qc_prep return ata_completion_errors
2020-10-01 13:18:26 +02:00
sata_dwc_460ex.c
ata: sata_dwc_460ex: Fix crash due to OOB write
2022-04-15 14:18:39 +02:00
sata_fsl.c
sata_fsl: fix warning in remove_proc_entry when rmmod sata_fsl
2021-12-08 09:01:11 +01:00
sata_gemini.c
ata: sata_gemini: Check clk_enable() result
2024-05-17 11:43:51 +02:00
sata_gemini.h
sata_highbank.c
ata: sata_highbank: fix OF node reference leak in highbank_initialize_phys()
2024-12-19 18:05:02 +01:00
sata_inic162x.c
ata: make qc_prep return ata_completion_errors
2020-10-01 13:18:26 +02:00
sata_mv.c
ata: sata_mv: Fix PCI device ID table declaration compilation warning
2024-04-13 12:51:36 +02:00
sata_nv.c
ata: sata_nv: Fix retrieving of active qcs
2020-11-05 11:43:12 +01:00
sata_promise.c
ata: make qc_prep return ata_completion_errors
2020-10-01 13:18:26 +02:00
sata_promise.h
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 18
2019-05-21 11:28:46 +02:00
sata_qstor.c
ata: make qc_prep return ata_completion_errors
2020-10-01 13:18:26 +02:00
sata_rcar.c
ata: sata_rcar: Fix DMA boundary mask
2020-11-01 12:01:06 +01:00
sata_sil.c
ata: sata_sil: Rename sil_blacklist to sil_quirks
2024-11-08 16:20:38 +01:00
sata_sil24.c
ata: make qc_prep return ata_completion_errors
2020-10-01 13:18:26 +02:00
sata_sis.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 18
2019-05-21 11:28:46 +02:00
sata_svw.c
libata: switch remaining drivers to use dma_set_mask_and_coherent
2019-08-26 13:58:59 -06:00
sata_sx4.c
ata: sata_sx4: Add error handling in pdc20621_i2c_read()
2025-05-02 07:39:08 +02:00
sata_uli.c
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 18
2019-05-21 11:28:46 +02:00
sata_via.c
libata: switch remaining drivers to use dma_set_mask_and_coherent
2019-08-26 13:58:59 -06:00
sata_vsc.c
libata: switch remaining drivers to use dma_set_mask_and_coherent
2019-08-26 13:58:59 -06:00
sis.h