RSA and ECDSA report every key file-open failure as -ENOENT.
fit_image_process_sig() and fit_config_process_sig() treat -ENOENT as
a missing key and return success. An unreadable key can therefore leave
an image unsigned even though mkimage succeeds.

Return the actual errno so file-open errors make mkimage fail.
Include the error description in the ECDSA diagnostic to match RSA.

Signed-off-by: Ayoub Zaki <[email protected]>
---
Changes in v2:
- Use a lib: prefix.
- Explain why -ENOENT permits unsigned success.
- Include strerror(-ret) in the ECDSA diagnostic.

 lib/ecdsa/ecdsa-libcrypto.c | 7 +++++--
 lib/rsa/rsa-sign.c          | 6 ++++--
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/lib/ecdsa/ecdsa-libcrypto.c b/lib/ecdsa/ecdsa-libcrypto.c
index c4bfb2cec61..a8e6b8f4c6f 100644
--- a/lib/ecdsa/ecdsa-libcrypto.c
+++ b/lib/ecdsa/ecdsa-libcrypto.c
@@ -228,10 +228,13 @@ static int read_key(struct signer *ctx, const char 
*key_name)
 {
        FILE *f = fopen(key_name, "r");
        const char *key_pass;
+       int ret;
 
        if (!f) {
-               fprintf(stderr, "Can not get key file '%s'\n", key_name);
-               return -ENOENT;
+               ret = -errno;
+               fprintf(stderr, "Can not get key file '%s': %s\n",
+                       key_name, strerror(-ret));
+               return ret;
        }
 
        key_pass = getenv("MKIMAGE_SIGN_PASSWORD");
diff --git a/lib/rsa/rsa-sign.c b/lib/rsa/rsa-sign.c
index 0e38c9e802f..3040b345fdd 100644
--- a/lib/rsa/rsa-sign.c
+++ b/lib/rsa/rsa-sign.c
@@ -188,6 +188,7 @@ static int rsa_pem_get_priv_key(const char *keydir, const 
char *name,
 {
        char path[1024] = {0};
        FILE *f = NULL;
+       int ret;
 
        if (!evpp)
                return -EINVAL;
@@ -202,9 +203,10 @@ static int rsa_pem_get_priv_key(const char *keydir, const 
char *name,
 
        f = fopen(path, "r");
        if (!f) {
+               ret = -errno;
                fprintf(stderr, "Couldn't open RSA private key: '%s': %s\n",
-                       path, strerror(errno));
-               return -ENOENT;
+                       path, strerror(-ret));
+               return ret;
        }
 
        if (!PEM_read_PrivateKey(f, evpp, NULL, path)) {
-- 
2.53.0

Reply via email to