[PATCH v2] android_ab: don't ignore ab_control_store return code

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 avromanov@salutedevices.com Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com --- boot/android_ab.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/boot/android_ab.c b/boot/android_ab.c index 73b55c196c..af3c375e07 100644 --- a/boot/android_ab.c +++ b/boot/android_ab.c @@ -337,7 +337,14 @@ 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); + return ret; + } }
#if ANDROID_AB_BACKUP_OFFSET @@ -346,8 +353,13 @@ 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); + return ret; + } } free(backup_abc); #endif

+ Tom Rini
Hello! Please, ping
On Mon, Dec 25, 2023 at 01:22:45PM +0300, Alexey Romanov wrote:
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 avromanov@salutedevices.com Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
boot/android_ab.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/boot/android_ab.c b/boot/android_ab.c index 73b55c196c..af3c375e07 100644 --- a/boot/android_ab.c +++ b/boot/android_ab.c @@ -337,7 +337,14 @@ 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);
return ret;
}}
#if ANDROID_AB_BACKUP_OFFSET @@ -346,8 +353,13 @@ 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);
return ret;
} free(backup_abc);}
#endif
2.39.2

Hi Alexey,
On Tue, Jan 09, 2024 at 10:37, Alexey Romanov avromanov@salutedevices.com wrote:
- Tom Rini
Hello! Please, ping
It seems that Igor (the Android AB maintainer) has been busy elsewhere.
I've requested to take over maintainership: https://lore.kernel.org/all/20240112-maintainers-ab-v1-0-f2a538eab18a@baylib...
If that gets accepted, I will pick up this patch.
Thank you for your patience,
Mattijs
On Mon, Dec 25, 2023 at 01:22:45PM +0300, Alexey Romanov wrote:
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 avromanov@salutedevices.com Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
boot/android_ab.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/boot/android_ab.c b/boot/android_ab.c index 73b55c196c..af3c375e07 100644 --- a/boot/android_ab.c +++ b/boot/android_ab.c @@ -337,7 +337,14 @@ 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);
return ret;
}}
#if ANDROID_AB_BACKUP_OFFSET @@ -346,8 +353,13 @@ 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);
return ret;
} free(backup_abc);}
#endif
2.39.2
-- Thank you, Alexey

On Mon, Dec 25, 2023 at 01:22:45PM +0300, Alexey Romanov wrote:
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 avromanov@salutedevices.com Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
Applied to u-boot/master, thanks!
participants (3)
-
Alexey Romanov
-
Mattijs Korpershoek
-
Tom Rini