[PATCH v2] android_ab: fix slot selection

Mattijs Korpershoek mkorpershoek at kernel.org
Mon Jun 8 11:17:43 CEST 2026


On Mon, May 25, 2026 at 00:31, Colin Pinnell McAllister <colinmca242 at gmail.com> wrote:

> The boot selection rules state that a slot is bootable if it is not
> corrupted and either has tries remaining or has already booted
> successfully. However, slots that have tries_remaining == 0 and
> successful_boot == 1 will be disregarded when picking the slot to
> attempt.
>
> Updates the selection logic so slots marked successful remain eligible
> even when their tries counter is zero. Debug message now also includes
> the successful_boot value.
>
> Signed-off-by: Colin Pinnell McAllister <colinmca242 at gmail.com>

Reviewed-by: Mattijs Korpershoek <mkorpershoek at kernel.org>

> ---
> Changes in v2:
> * No changes, just sending the patch from a gmail address
>
>  boot/android_ab.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/boot/android_ab.c b/boot/android_ab.c
> index 13e82dbcb7f..f2b1110aa24 100644
> --- a/boot/android_ab.c
> +++ b/boot/android_ab.c
> @@ -289,11 +289,14 @@ int ab_select_slot(struct blk_desc *dev_desc, struct disk_partition *part_info,
>  	slot = -1;
>  	for (i = 0; i < abc->nb_slot; ++i) {
>  		if (abc->slot_info[i].verity_corrupted ||
> -		    !abc->slot_info[i].tries_remaining) {
> +		    (!abc->slot_info[i].tries_remaining &&
> +		     !abc->slot_info[i].successful_boot)) {
>  			log_debug("ANDROID: unbootable slot %d tries: %d, ",
>  				  i, abc->slot_info[i].tries_remaining);
> -			log_debug("corrupt: %d\n",
> +			log_debug("corrupt: %d, ",
>  				  abc->slot_info[i].verity_corrupted);
> +			log_debug("successful: %d\n",
> +				  abc->slot_info[i].successful_boot);
>  			continue;
>  		}
>  		log_debug("ANDROID: bootable slot %d pri: %d, tries: %d, ",
> -- 
> 2.34.1


More information about the U-Boot mailing list