plpks_confirm_object_flushed() returns zero or a negative Linux errno.
However, plpks_gen_wrapping_key() passes this return value through
pseries_status_to_err(), which treats it as a raw hypervisor status and
converts it again.

Convert only errors returned by H_PKS_GEN_KEY, and propagate errors from
plpks_confirm_object_flushed() unchanged.

Fixes: 133aa79e211d ("pseries/plpks: add HCALLs for PowerVM Key Wrapping 
Module")
Cc: [email protected] # 7.0: a2df535d9dd9: pseries/plpks: rename the 
default wrapping key macro
Cc: [email protected] # 7.0
Signed-off-by: Srish Srinivasan <[email protected]>
---
 arch/powerpc/platforms/pseries/plpks.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/plpks.c 
b/arch/powerpc/platforms/pseries/plpks.c
index 110251914b51..376c50d459fc 100644
--- a/arch/powerpc/platforms/pseries/plpks.c
+++ b/arch/powerpc/platforms/pseries/plpks.c
@@ -932,6 +932,7 @@ EXPORT_SYMBOL_GPL(plpks_wrapping_is_supported);
  * -ENOMEM     if there is inadequate memory to perform this operation
  * -EBUSY      if unable to handle the request
  * -EEXIST     if the object label already exists
+ * -ETIMEDOUT  if the object was not flushed to storage in time
  *
  * Returns: On success 0 is returned, a negative errno if not.
  */
@@ -940,7 +941,7 @@ int plpks_gen_wrapping_key(void)
        unsigned long retbuf[PLPAR_HCALL_BUFSIZE] = { 0 };
        struct plpks_auth *auth;
        struct label *label;
-       int rc = 0, pseries_status = 0;
+       int rc, pseries_status;
        struct plpks_var var = {
                .name = PLPKS_DEFAULT_WRAPKEY_LABEL,
                .namelen = sizeof(PLPKS_DEFAULT_WRAPKEY_LABEL) - 1,
@@ -964,17 +965,17 @@ int plpks_gen_wrapping_key(void)
                         label->size, var.policy,
                         NULL, PLPKS_WRAPPING_KEY_LENGTH);
 
-       if (!rc)
+       if (!rc) {
                rc = plpks_confirm_object_flushed(label, auth);
-
-       pseries_status = rc;
-       rc = pseries_status_to_err(rc);
-
-       if (rc && rc != -EEXIST) {
-               pr_err("H_PKS_GEN_KEY failed. pseries_status=%d, rc=%d",
-                      pseries_status, rc);
        } else {
-               rc = 0;
+               pseries_status = rc;
+               rc = pseries_status_to_err(rc);
+
+               if (rc != -EEXIST)
+                       pr_err("H_PKS_GEN_KEY failed. pseries_status=%d, rc=%d",
+                              pseries_status, rc);
+               else
+                       rc = 0;
        }
 
        kfree(label);
-- 
2.52.0


Reply via email to