Skip to content

Commit

Permalink
fdt: Update functions which write to an FDT to return -ENOSPC
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
sjg20 authored and trini committed Jun 11, 2014
1 parent 63b4b5b commit 4f427a4
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 12 deletions.
4 changes: 2 additions & 2 deletions common/image-fit.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand All @@ -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;
Expand Down
3 changes: 2 additions & 1 deletion include/rsa.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
28 changes: 19 additions & 9 deletions lib/rsa/rsa-sign.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

0 comments on commit 4f427a4

Please sign in to comment.