summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2014-06-12 07:24:42 -0600
committerTom Rini <trini@ti.com>2014-06-19 11:18:56 -0400
commit597a8b2c68574970dc38c55abe07712b6045776a (patch)
tree815ebb32149d51c50d4b0af257acc9f932446412
parent04819a4ff1c93972ac46aedd3f17becbd5e0b588 (diff)
downloadtalos-obmc-uboot-597a8b2c68574970dc38c55abe07712b6045776a.tar.gz
talos-obmc-uboot-597a8b2c68574970dc38c55abe07712b6045776a.zip
mkimage: Automatically expand FDT in more cases
The original code did not cover every case and there was a missing negative sign in one case. Expand the coverage and fix the bug. Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r--lib/rsa/rsa-sign.c27
-rw-r--r--tools/image-host.c4
2 files changed, 21 insertions, 10 deletions
diff --git a/lib/rsa/rsa-sign.c b/lib/rsa/rsa-sign.c
index 48f3197209..83f5e87838 100644
--- a/lib/rsa/rsa-sign.c
+++ b/lib/rsa/rsa-sign.c
@@ -405,11 +405,15 @@ int rsa_add_verify_data(struct image_sign_info *info, void *keydest)
if (parent == -FDT_ERR_NOTFOUND) {
parent = fdt_add_subnode(keydest, 0, FIT_SIG_NODENAME);
if (parent < 0) {
- fprintf(stderr, "Couldn't create signature node: %s\n",
- fdt_strerror(parent));
- return -EINVAL;
+ ret = parent;
+ if (ret != -FDT_ERR_NOSPACE) {
+ fprintf(stderr, "Couldn't create signature node: %s\n",
+ fdt_strerror(parent));
+ }
}
}
+ if (ret)
+ goto done;
/* Either create or overwrite the named key node */
snprintf(name, sizeof(name), "key-%s", info->keyname);
@@ -417,18 +421,22 @@ int rsa_add_verify_data(struct image_sign_info *info, void *keydest)
if (node == -FDT_ERR_NOTFOUND) {
node = fdt_add_subnode(keydest, parent, name);
if (node < 0) {
- fprintf(stderr, "Could not create key subnode: %s\n",
- fdt_strerror(node));
- return -EINVAL;
+ ret = node;
+ if (ret != -FDT_ERR_NOSPACE) {
+ fprintf(stderr, "Could not create key subnode: %s\n",
+ fdt_strerror(node));
+ }
}
} else if (node < 0) {
fprintf(stderr, "Cannot select keys parent: %s\n",
fdt_strerror(node));
- return -ENOSPC;
+ ret = node;
}
- ret = fdt_setprop_string(keydest, node, "key-name-hint",
+ if (!ret) {
+ ret = fdt_setprop_string(keydest, node, "key-name-hint",
info->keyname);
+ }
if (!ret)
ret = fdt_setprop_u32(keydest, node, "rsa,num-bits", bits);
if (!ret)
@@ -449,10 +457,11 @@ int rsa_add_verify_data(struct image_sign_info *info, void *keydest)
ret = fdt_setprop_string(keydest, node, "required",
info->require_keys);
}
+done:
BN_free(modulus);
BN_free(r_squared);
if (ret)
- return ret == FDT_ERR_NOSPACE ? -ENOSPC : -EIO;
+ return ret == -FDT_ERR_NOSPACE ? -ENOSPC : -EIO;
return 0;
}
diff --git a/tools/image-host.c b/tools/image-host.c
index 2be5e8043c..faeef66efc 100644
--- a/tools/image-host.c
+++ b/tools/image-host.c
@@ -609,11 +609,13 @@ static int fit_config_process_sig(const char *keydir, void *keydest,
/* Write the public key into the supplied FDT file */
if (keydest) {
ret = info.algo->add_verify_data(&info, keydest);
+ if (ret == -ENOSPC)
+ return -ENOSPC;
if (ret) {
printf("Failed to add verification data for '%s' signature node in '%s' image node\n",
node_name, conf_name);
- return ret == FDT_ERR_NOSPACE ? -ENOSPC : -EIO;
}
+ return ret;
}
return 0;
OpenPOWER on IntegriCloud