plpks_confirm_object_flushed() returns zero or a negative Linux errno.
However, plpks_write_var() and plpks_remove_var() pass 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 the write and remove HCALLs, and propagate
errors from plpks_confirm_object_flushed() unchanged.

Fixes: 2454a7af0f2a ("powerpc/pseries: define driver for Platform KeyStore")
Cc: [email protected] # 6.0
Signed-off-by: Srish Srinivasan <[email protected]>
---
 arch/powerpc/platforms/pseries/plpks.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/plpks.c 
b/arch/powerpc/platforms/pseries/plpks.c
index 240cd5632446..110251914b51 100644
--- a/arch/powerpc/platforms/pseries/plpks.c
+++ b/arch/powerpc/platforms/pseries/plpks.c
@@ -714,6 +714,7 @@ int plpks_signed_update_var(struct plpks_var *var, u64 
flags)
  * -ENOMEM     if unable to store the requested object in the space available
  * -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.
  */
@@ -750,8 +751,9 @@ int plpks_write_var(struct plpks_var var)
 
        if (!rc)
                rc = plpks_confirm_object_flushed(label, auth);
+       else
+               rc = pseries_status_to_err(rc);
 
-       rc = pseries_status_to_err(rc);
        kfree(label);
 out:
        kfree_sensitive(auth);
@@ -780,6 +782,7 @@ int plpks_write_var(struct plpks_var var)
  * -EPERM      if access is denied
  * -ENOENT     if the requested object was not found
  * -EBUSY      if unable to handle the request
+ * -ETIMEDOUT  if the object was not flushed to storage in time
  *
  * Returns: On success 0 is returned, a negative errno if not.
  */
@@ -808,8 +811,9 @@ int plpks_remove_var(char *component, u8 varos, struct 
plpks_var_name vname)
 
        if (!rc)
                rc = plpks_confirm_object_flushed(label, auth);
+       else
+               rc = pseries_status_to_err(rc);
 
-       rc = pseries_status_to_err(rc);
        kfree(label);
 out:
        kfree_sensitive(auth);
-- 
2.52.0


Reply via email to