Re: [PATCH] s390: uv: Fix loop condition in uv_find_secrets

Claudio Imbrenda <[email protected]>
Newsgroups org.kernel.vger.linux-s390,org.kernel.vger.kvm,org.kernel.vger.linux-kernel
Organization IBM
Message-ID <20260811173457.6fb3b438@p-imbrenda>
On Tue, 11 Aug 2026 10:43:52 +0200
Steffen Eiden <[email protected]> wrote:

> Nothing modified `start_idx` between the assignment and the comparison,
> so the condition was always false and the do/while ran exactly once
> even when the UV returned UVC_RC_MORE_DATA. Systems with more than
> 85 UV secrets got -ENOENT for any secret past the first page.
> 
> Fix this by setting the start index at the beginning of the loop not at
> the end. First test if there are more secrets left by comparing
> start_idx with list->next_secret_idx, and then set the start index to the
> next secret index.
> 
> Fixes: 7c9137af2042 ("s390/uv: Retrieve UV secrets support")
> Signed-off-by: Steffen Eiden <[email protected]>

Acked-by: Claudio Imbrenda <[email protected]>

> ---
>  arch/s390/kernel/uv.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/s390/kernel/uv.c b/arch/s390/kernel/uv.c
> index a284f98d9716..d970b15ef126 100644
> --- a/arch/s390/kernel/uv.c
> +++ b/arch/s390/kernel/uv.c
> @@ -781,11 +781,14 @@ int uv_find_secret(const u8 secret_id[UV_SECRET_ID_LEN],
>  		   struct uv_secret_list *list,
>  		   struct uv_secret_list_item_hdr *secret)
>  {
> -	u16 start_idx = 0;
> +	u16 start_idx;
>  	u16 list_rc;
>  	int ret;
>  
> +	list->next_secret_idx = 0;
> +
>  	do {
> +		start_idx = list->next_secret_idx;
>  		uv_list_secrets(list, start_idx, &list_rc, NULL);
>  		if (list_rc != UVC_RC_EXECUTED && list_rc != UVC_RC_MORE_DATA) {
>  			if (list_rc == UVC_RC_INV_CMD)
> @@ -796,7 +799,6 @@ int uv_find_secret(const u8 secret_id[UV_SECRET_ID_LEN],
>  		ret = find_secret_in_page(secret_id, list, secret);
>  		if (ret == 0)
>  			return ret;
> -		start_idx = list->next_secret_idx;
>  	} while (list_rc == UVC_RC_MORE_DATA && start_idx < list->next_secret_idx);
>  
>  	return -ENOENT;
> 
> ---
> base-commit: d58772d8520c7ef247c4b95c9bd76d3a25da9ff5
> change-id: 20260811-uv_secrets_fix-58a63b4a4ec4
> 
> Best regards,
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.