ab_control_store() can return an error if writing to disk fails. In this case, we have to pass the error code to the caller.
Signed-off-by: Alexey Romanov <avroma...@salutedevices.com> --- boot/android_ab.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/boot/android_ab.c b/boot/android_ab.c index 73b55c196c..5a3152dd53 100644 --- a/boot/android_ab.c +++ b/boot/android_ab.c @@ -337,7 +337,15 @@ int ab_select_slot(struct blk_desc *dev_desc, struct disk_partition *part_info, if (store_needed) { abc->crc32_le = ab_control_compute_crc(abc); - ab_control_store(dev_desc, part_info, abc, 0); + ret = ab_control_store(dev_desc, part_info, abc, 0); + if (ret < 0) { +#if ANDROID_AB_BACKUP_OFFSET + free(backup_abc); +#endif + free(abc); + log_err("ANDROID: failed to store boot control block: %d\n", ret); + return ret; + } } #if ANDROID_AB_BACKUP_OFFSET @@ -346,8 +354,14 @@ int ab_select_slot(struct blk_desc *dev_desc, struct disk_partition *part_info, * to the backup offset */ if (memcmp(backup_abc, abc, sizeof(*abc)) != 0) { - ab_control_store(dev_desc, part_info, abc, + ret = ab_control_store(dev_desc, part_info, abc, ANDROID_AB_BACKUP_OFFSET); + if (ret < 0) { + free(backup_abc); + free(abc); + log_err("ANDROID: failed to store boot control block: %d\n", ret); + return ret; + } } free(backup_abc); #endif -- 2.39.2