diff --git a/security/keys/key.c b/security/keys/key.c
index 51d23c6234247ec53d708932d0d453023f6908e0..2751ab4a7946ca3ec286e34174577cd2c4c6f52e 100644
--- a/security/keys/key.c
+++ b/security/keys/key.c
@@ -907,6 +907,16 @@ key_ref_t key_create_or_update(key_ref_t keyring_ref,
 	 */
 	__key_link_end(keyring, &index_key, edit);
 
+	key = key_ref_to_ptr(key_ref);
+	if (test_bit(KEY_FLAG_USER_CONSTRUCT, &key->flags)) {
+		ret = wait_for_key_construction(key, true);
+		if (ret < 0) {
+			key_ref_put(key_ref);
+			key_ref = ERR_PTR(ret);
+			goto error_free_prep;
+		}
+	}
+
 	key_ref = __key_update(key_ref, &prep);
 	goto error_free_prep;
 }