During a bulk load of kernel keys, an attempt to load a key that is
already on the kernel keyring emits this ndctl error message:
        add_key failed: Invalid argument

and this message in the kernel log:
        encrypted_key: keyword 'load' not allowed when called from .update 
method

Avoid these error messages by checking the kernel keyring before
trying to load.

Fixes: 9925be9d6793 ("ndctl: add a load-keys command and a modprobe config")
Signed-off-by: Alison Schofield <[email protected]>
---
 ndctl/load-keys.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/ndctl/load-keys.c b/ndctl/load-keys.c
index 26648fe..9124d5b 100644
--- a/ndctl/load-keys.c
+++ b/ndctl/load-keys.c
@@ -132,6 +132,16 @@ static int load_dimm_keys(struct loadkeys *lk_ctx)
                        continue;
                }
 
+               /* Skip if key is already on kernel keyring */
+               key = keyctl_search(KEY_SPEC_USER_KEYRING, "encrypted",
+                                   desc, 0);
+
+               if (key > 0) {
+                       free(fname);
+                       free(blob);
+                       continue;
+               }
+
                key = add_key("encrypted", desc, blob, size,
                                KEY_SPEC_USER_KEYRING);
                if (key < 0)

base-commit: 4e646fa490ba4b782afa188dd8818b94c419924e
-- 
2.25.1


Reply via email to