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
