On Mon, 27 Jul 2026 at 14:45, Heinrich Schuchardt <[email protected]> wrote: > > In case of an error in efi_sigstore_parse_siglist() function > efi_sigstore_free() is called. Currently it fails to free allocated data > because siglist->sig_data_list is not set on the error path. > > Always update siglist->sig_data_list when a struct efi_sig_data is > allocated. > > Suggested-by: Ilias Apalodimas <[email protected]> > Signed-off-by: Heinrich Schuchardt <[email protected]> > --- > v2: > Update siglist->sig_data_list inside loop. > ---
Reviewed-by: Ilias Apalodimas <[email protected]> > lib/efi_loader/efi_signature.c | 10 ++++------ > 1 file changed, 4 insertions(+), 6 deletions(-) > > diff --git a/lib/efi_loader/efi_signature.c b/lib/efi_loader/efi_signature.c > index f99a0c29d2b..c2be5cb61b3 100644 > --- a/lib/efi_loader/efi_signature.c > +++ b/lib/efi_loader/efi_signature.c > @@ -647,7 +647,7 @@ static struct efi_signature_store * > efi_sigstore_parse_siglist(struct efi_signature_list *esl) > { > struct efi_signature_store *siglist = NULL; > - struct efi_sig_data *sig_data, *sig_data_next; > + struct efi_sig_data *sig_data; > struct efi_signature_data *esd; > size_t left; > > @@ -690,7 +690,6 @@ efi_sigstore_parse_siglist(struct efi_signature_list *esl) > memcpy(&siglist->sig_type, &esl->signature_type, sizeof(efi_guid_t)); > > /* Go through the list */ > - sig_data_next = NULL; > left = esl->signature_list_size > - (sizeof(*esl) + esl->signature_header_size); > esd = (struct efi_signature_data *) > @@ -709,6 +708,9 @@ efi_sigstore_parse_siglist(struct efi_signature_list *esl) > goto err; > } > > + sig_data->next = siglist->sig_data_list; > + siglist->sig_data_list = sig_data; > + > /* Append signature data */ > memcpy(&sig_data->owner, &esd->signature_owner, > sizeof(efi_guid_t)); > @@ -721,15 +723,11 @@ efi_sigstore_parse_siglist(struct efi_signature_list > *esl) > } > memcpy(sig_data->data, esd->signature_data, sig_data->size); > > - sig_data->next = sig_data_next; > - sig_data_next = sig_data; > - > /* Next */ > esd = (struct efi_signature_data *) > ((u8 *)esd + esl->signature_size); > left -= esl->signature_size; > } > - siglist->sig_data_list = sig_data_next; > > return siglist; > > -- > 2.53.0 >
