linux/drivers/crypto/ccp
Mario Limonciello (AMD) d473b06773 crypto: ccp - Send PSP_CMD_TEE_RING_DESTROY when PSP_CMD_TEE_RING_INIT fails
[ Upstream commit 7b85137caf ]

The hibernate resume sequence involves loading a resume kernel that is just
used for loading the hibernate image before shifting back to the existing
kernel.

During that hibernate resume sequence the resume kernel may have loaded
the ccp driver.  If this happens the resume kernel will also have called
PSP_CMD_TEE_RING_INIT but it will never have called
PSP_CMD_TEE_RING_DESTROY.

This is problematic because the existing kernel needs to re-initialize the
ring.  One could argue that the existing kernel should call destroy
as part of restore() but there is no guarantee that the resume kernel did
or didn't load the ccp driver.  There is also no callback opportunity for
the resume kernel to destroy before handing back control to the existing
kernel.

Similar problems could potentially exist with the use of kdump and
crash handling. I actually reproduced this issue like this:

1) rmmod ccp
2) hibernate the system
3) resume the system
4) modprobe ccp

The resume kernel will have loaded ccp but never destroyed and then when
I try to modprobe it fails.

Because of these possible cases add a flow that checks the error code from
the PSP_CMD_TEE_RING_INIT call and tries to call PSP_CMD_TEE_RING_DESTROY
if it failed.  If this succeeds then call PSP_CMD_TEE_RING_INIT again.

Fixes: f892a21f51 ("crypto: ccp - use generic power management")
Reported-by: Lars Francke <lars.francke@gmail.com>
Closes: https://lore.kernel.org/platform-driver-x86/CAD-Ua_gfJnQSo8ucS_7ZwzuhoBRJ14zXP7s8b-zX3ZcxcyWePw@mail.gmail.com/
Tested-by: Yijun Shen <Yijun.Shen@Dell.com>
Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
Reviewed-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
Acked-by: Tom Lendacky <thomas.lendacky@amd.com>
Link: https://patch.msgid.link/20260116041132.153674-6-superm1@kernel.org
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2026-03-04 07:20:20 -05:00
..
ccp-crypto-aes-cmac.c crypto: ccp - Set DMA alignment explicitly 2022-12-09 18:45:00 +08:00
ccp-crypto-aes-galois.c crypto: ccp - Set DMA alignment explicitly 2022-12-09 18:45:00 +08:00
ccp-crypto-aes-xts.c crypto: ccp - Set DMA alignment explicitly 2022-12-09 18:45:00 +08:00
ccp-crypto-aes.c crypto: ccp - Remove cfb and ofb 2023-12-08 11:59:46 +08:00
ccp-crypto-des3.c crypto: ccp - Set DMA alignment explicitly 2022-12-09 18:45:00 +08:00
ccp-crypto-main.c crypto: ccp - Use request_complete helpers 2023-02-13 18:34:49 +08:00
ccp-crypto-rsa.c crypto: ccp - Set DMA alignment explicitly 2022-12-09 18:45:00 +08:00
ccp-crypto-sha.c crypto: ccp - Set DMA alignment explicitly 2022-12-09 18:45:00 +08:00
ccp-crypto.h crypto: sha - split sha.h into sha1.h and sha2.h 2020-11-20 14:45:33 +11:00
ccp-debugfs.c crypto: ccp - Fix crash when rebind ccp device for ccp.ko 2025-08-15 12:13:53 +02:00
ccp-dev-v3.c crypto: ccp - Make use of the helper macro kthread_run() 2021-10-29 21:04:04 +08:00
ccp-dev-v5.c crypto: ccp - Make use of the helper macro kthread_run() 2021-10-29 21:04:04 +08:00
ccp-dev.c crypto: ccp - no need to initialise statics to 0 2021-11-20 15:06:38 +11:00
ccp-dev.h crypto: ccp - fix typo in comment 2022-06-10 16:40:18 +08:00
ccp-dmaengine.c crypto: ccp - Failure on re-initialization due to duplicate sysfs filename 2023-01-20 18:29:31 +08:00
ccp-ops.c crypto: ccp - fix memleak in ccp_init_dm_workarea 2023-12-08 11:45:27 +08:00
dbc.c crypto: ccp - Represent capabilities register as a union 2024-06-07 19:46:39 +08:00
dbc.h crypto: ccp - Add support for DBC over PSP mailbox 2023-09-15 18:29:46 +08:00
hsti.c crypto: ccp - Fix incorrect payload size calculation in psp_poulate_hsti() 2025-11-13 15:34:23 -05:00
hsti.h crypto: ccp - Add support for getting security attributes on some older systems 2024-06-07 19:46:39 +08:00
Kconfig crypto: ccp - Have it depend on AMD_IOMMU 2024-02-13 12:21:15 +01:00
Makefile crypto: ccp - Move security attributes to their own file 2024-06-07 19:46:39 +08:00
platform-access.c crypto: ccp - Avoid discarding errors in psp_send_platform_access_msg() 2024-02-24 08:41:20 +08:00
platform-access.h crypto: ccp - Add support for ringing a platform doorbell 2023-03-17 11:16:43 +08:00
psp-dev.c crypto: ccp - Add an S4 restore flow 2026-03-04 07:20:20 -05:00
psp-dev.h crypto: ccp - Add support for getting security attributes on some older systems 2024-06-07 19:46:39 +08:00
sev-dev.c crypto: ccp - narrow scope of snp_range_list 2026-03-04 07:19:35 -05:00
sev-dev.h crypto: ccp: Handle legacy SEV commands when SNP is enabled 2024-01-29 20:34:18 +01:00
sp-dev.c crypto: ccp - Add an S4 restore flow 2026-03-04 07:20:20 -05:00
sp-dev.h crypto: ccp - Add an S4 restore flow 2026-03-04 07:20:20 -05:00
sp-pci.c crypto: ccp - Add an S4 restore flow 2026-03-04 07:20:20 -05:00
sp-platform.c crypto: ccp - drop platform ifdef checks 2024-04-12 15:07:51 +08:00
tee-dev.c crypto: ccp - Send PSP_CMD_TEE_RING_DESTROY when PSP_CMD_TEE_RING_INIT fails 2026-03-04 07:20:20 -05:00
tee-dev.h crypto: ccp - Add an S4 restore flow 2026-03-04 07:20:20 -05:00