]> git.sur5r.net Git - u-boot/commitdiff
fdt: Update functions which write to an FDT to return -ENOSPC
authorSimon Glass <sjg@chromium.org>
Tue, 3 Jun 2014 04:04:51 +0000 (22:04 -0600)
committerTom Rini <trini@ti.com>
Wed, 11 Jun 2014 20:25:46 +0000 (16:25 -0400)
When writing values into an FDT it is possible that there will be
insufficient space. If the caller gets a useful error then it can
potentially deal with the situation.

Adjust these functions to return -ENOSPC when the FDT is full.

Signed-off-by: Simon Glass <sjg@chromium.org>
common/image-fit.c
include/rsa.h
lib/rsa/rsa-sign.c

index 77f32bce316fe41e74e630e5ae6488262988ec06..732505a36c165436b0751890378d3d76e6b479e9 100644 (file)
@@ -833,7 +833,7 @@ static int fit_image_hash_get_ignore(const void *fit, int noffset, int *ignore)
  *
  * returns:
  *     0, on success
- *     -1, on property read failure
+ *     -ENOSPC if no space in device tree, -1 for other error
  */
 int fit_set_timestamp(void *fit, int noffset, time_t timestamp)
 {
@@ -847,7 +847,7 @@ int fit_set_timestamp(void *fit, int noffset, time_t timestamp)
                printf("Can't set '%s' property for '%s' node (%s)\n",
                       FIT_TIMESTAMP_PROP, fit_get_name(fit, noffset, NULL),
                       fdt_strerror(ret));
-               return -1;
+               return ret == -FDT_ERR_NOSPACE ? -ENOSPC : -1;
        }
 
        return 0;
index a5680ab88c134ded0f3c4814d7d645fc0b0de3bd..325751ab7e1896c548e2c229708ad1a04670c2f5 100644 (file)
@@ -60,7 +60,8 @@ int rsa_sign(struct image_sign_info *info,
  *
  * @info:      Specifies key and FIT information
  * @keydest:   Destination FDT blob for public key data
- * @return: 0, on success, -ve on error
+ * @return: 0, on success, -ENOSPC if the keydest FDT blob ran out of space,
+               other -ve value on error
 */
 int rsa_add_verify_data(struct image_sign_info *info, void *keydest);
 #else
index ca8c120d97cf96b0de668674a8d84194139cc9c6..48f3197209686156c325226d94866556886f3fee 100644 (file)
@@ -429,20 +429,30 @@ int rsa_add_verify_data(struct image_sign_info *info, void *keydest)
 
        ret = fdt_setprop_string(keydest, node, "key-name-hint",
                                 info->keyname);
-       ret |= fdt_setprop_u32(keydest, node, "rsa,num-bits", bits);
-       ret |= fdt_setprop_u32(keydest, node, "rsa,n0-inverse", n0_inv);
-       ret |= fdt_add_bignum(keydest, node, "rsa,modulus", modulus, bits);
-       ret |= fdt_add_bignum(keydest, node, "rsa,r-squared", r_squared, bits);
-       ret |= fdt_setprop_string(keydest, node, FIT_ALGO_PROP,
-                                 info->algo->name);
+       if (!ret)
+               ret = fdt_setprop_u32(keydest, node, "rsa,num-bits", bits);
+       if (!ret)
+               ret = fdt_setprop_u32(keydest, node, "rsa,n0-inverse", n0_inv);
+       if (!ret) {
+               ret = fdt_add_bignum(keydest, node, "rsa,modulus", modulus,
+                                    bits);
+       }
+       if (!ret) {
+               ret = fdt_add_bignum(keydest, node, "rsa,r-squared", r_squared,
+                                    bits);
+       }
+       if (!ret) {
+               ret = fdt_setprop_string(keydest, node, FIT_ALGO_PROP,
+                                        info->algo->name);
+       }
        if (info->require_keys) {
-               fdt_setprop_string(keydest, node, "required",
-                                  info->require_keys);
+               ret = fdt_setprop_string(keydest, node, "required",
+                                        info->require_keys);
        }
        BN_free(modulus);
        BN_free(r_squared);
        if (ret)
-               return -EIO;
+               return ret == FDT_ERR_NOSPACE ? -ENOSPC : -EIO;
 
        return 0;
 }