[PATCH v1 1/4] crypto/ccp: Reverse the cleanup order in psp_dev_destroy()

From: Tycho Andersen

Date: Wed Apr 08 2026 - 10:35:27 EST


From: "Tycho Andersen (AMD)" <tycho@xxxxxxxxxx>

Before SNP x86 shutdown [1], all HV_FIXED pages were always leaked on
module unload. Now pages can be reclaimed if they are freed before SNP
shutdown.

The SFS driver does sfs_dev_destroy() -> snp_free_hv_fixed_pages(), marking
the command buffer as free. But this happens after sev_dev_destroy() in
psp_dev_destroy(), so the pages are always leaked.

Rearrange psp_dev_destroy() to destroy things in the reverse order from
psp_init(), so that any dependencies can be unwound accordingly. This lets
SFS free the page and the subsequent SNP shutdown release it.

This was identified with use of Chris Mason's review-prompts:
https://github.com/masoncl/review-prompts

[1]: https://lore.kernel.org/all/20260324161301.1353976-1-tycho@xxxxxxxxxx/

Fixes: 648dbccc03a0 ("crypto: ccp - Add AMD Seamless Firmware Servicing (SFS) driver")
Reported-by: review-prompts
Assisted-by: Claude:claude-4.6-opus
Suggested-by: Tom Lendacky <thomas.lendacky@xxxxxxx>
Signed-off-by: Tycho Andersen (AMD) <tycho@xxxxxxxxxx>
Reviewed-by: Ashish Kalra <ashish.kalra@xxxxxxx>
---
drivers/crypto/ccp/psp-dev.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/crypto/ccp/psp-dev.c b/drivers/crypto/ccp/psp-dev.c
index 5c7f7e02a7d8..b14ce51065d5 100644
--- a/drivers/crypto/ccp/psp-dev.c
+++ b/drivers/crypto/ccp/psp-dev.c
@@ -316,15 +316,15 @@ void psp_dev_destroy(struct sp_device *sp)
if (!psp)
return;

- sev_dev_destroy(psp);
+ dbc_dev_destroy(psp);

- tee_dev_destroy(psp);
+ platform_access_dev_destroy(psp);

sfs_dev_destroy(psp);

- dbc_dev_destroy(psp);
+ tee_dev_destroy(psp);

- platform_access_dev_destroy(psp);
+ sev_dev_destroy(psp);

sp_free_psp_irq(sp, psp);

--
2.53.0