All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: pgonda@google.com
Cc: linux-crypto@vger.kernel.org
Subject: [bug report] crypto: ccp - Move SEV_INIT retry for corrupted data
Date: Mon, 10 Jan 2022 16:02:04 +0300	[thread overview]
Message-ID: <20220110130204.GA5984@kili> (raw)

Hello Peter Gonda,

The patch e423b9d75e77: "crypto: ccp - Move SEV_INIT retry for
corrupted data" from Dec 7, 2021, leads to the following Smatch
static checker warning:

	drivers/crypto/ccp/sev-dev.c:430 __sev_platform_init_locked()
	error: uninitialized symbol 'psp_ret'.

drivers/crypto/ccp/sev-dev.c
    412 static int __sev_platform_init_locked(int *error)
    413 {
    414         struct psp_device *psp = psp_master;
    415         struct sev_device *sev;
    416         int rc, psp_ret;
    417         int (*init_function)(int *error);
    418 
    419         if (!psp || !psp->sev_data)
    420                 return -ENODEV;
    421 
    422         sev = psp->sev_data;
    423 
    424         if (sev->state == SEV_STATE_INIT)
    425                 return 0;
    426 
    427         init_function = sev_init_ex_buffer ? __sev_init_ex_locked :
    428                         __sev_init_locked;
    429         rc = init_function(&psp_ret);
--> 430         if (rc && psp_ret == SEV_RET_SECURE_DATA_INVALID) {

There are a bunch of failure paths where "rc" is set and "psp_ret" is
not initialized.

    431                 /*
    432                  * Initialization command returned an integrity check failure
    433                  * status code, meaning that firmware load and validation of SEV
    434                  * related persistent data has failed. Retrying the
    435                  * initialization function should succeed by replacing the state
    436                  * with a reset state.
    437                  */
    438                 dev_dbg(sev->dev, "SEV: retrying INIT command");
    439                 rc = init_function(&psp_ret);
    440         }
    441         if (error)
    442                 *error = psp_ret;
    443 
    444         if (rc)
    445                 return rc;
    446 
    447         sev->state = SEV_STATE_INIT;
    448 
    449         /* Prepare for first SEV guest launch after INIT */
    450         wbinvd_on_all_cpus();
    451         rc = __sev_do_cmd_locked(SEV_CMD_DF_FLUSH, NULL, error);
    452         if (rc)
    453                 return rc;
    454 
    455         dev_dbg(sev->dev, "SEV firmware initialized\n");
    456 
    457         dev_info(sev->dev, "SEV API:%d.%d build:%d\n", sev->api_major,
    458                  sev->api_minor, sev->build);
    459 
    460         return 0;
    461 }

regards,
dan carpenter

                 reply	other threads:[~2022-01-10 13:03 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220110130204.GA5984@kili \
    --to=dan.carpenter@oracle.com \
    --cc=linux-crypto@vger.kernel.org \
    --cc=pgonda@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.