]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
crypto: ccp - Initialize data during __sev_snp_init_locked()
authorTycho Andersen (AMD) <tycho@kernel.org>
Wed, 8 Apr 2026 14:32:59 +0000 (08:32 -0600)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 7 May 2026 08:09:58 +0000 (16:09 +0800)
Sashiko notes:

> is the stack variable data left uninitialized when taking the else branch?
> Since data.tio_en is later evaluated unconditionally, could stack garbage
> cause it to evaluate to true, leading to erroneous attempts to allocate
> pages and initialize SEV-TIO on unsupported hardware?

If the firmware is too old to support SEV_INIT_EX, data is left
uninitialized but used in the debug logging about whether TIO is enabled or
not.

Fixes: 4be423572da1 ("crypto/ccp: Implement SEV-TIO PCIe IDE (phase1)")
Reported-by: Sashiko
Assisted-by: Gemini:gemini-3.1-pro-preview
Link: https://sashiko.dev/#/patchset/20260324161301.1353976-1-tycho%40kernel.org
Signed-off-by: Tycho Andersen (AMD) <tycho@kernel.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/ccp/sev-dev.c

index 48caeffcc2172a3cd0702ff2fbf75af7e4d5a062..8a85439cfa7637da85902e04662a1956bc49f8cc 100644 (file)
@@ -1356,7 +1356,7 @@ static int __sev_snp_init_locked(int *error, unsigned int max_snp_asid)
 {
        struct sev_data_range_list *snp_range_list __free(kfree) = NULL;
        struct psp_device *psp = psp_master;
-       struct sev_data_snp_init_ex data;
+       struct sev_data_snp_init_ex data = {};
        struct sev_device *sev;
        void *arg = &data;
        int cmd, rc = 0;
@@ -1420,8 +1420,6 @@ static int __sev_snp_init_locked(int *error, unsigned int max_snp_asid)
                 */
                snp_add_hv_fixed_pages(sev, snp_range_list);
 
-               memset(&data, 0, sizeof(data));
-
                if (max_snp_asid) {
                        data.ciphertext_hiding_en = 1;
                        data.max_snp_asid = max_snp_asid;